2012-11-07 64 views
7

हाय मैं टेम्पलेट दस्तावेज़ में पदों पर उपयोगकर्ता इनपुट मुद्रित करने के लिए पीडीएफ तेज का उपयोग कर रहा हूं।सी # पीडीएफ दस्तावेज में तीव्र स्थिति

डेटा (क्षेत्र) उपयोगकर्ता (वेब ​​पृष्ठ) से एकत्र कर रहे हैं और drawstring विधि का उपयोग कर दस्तावेज़ पर उचित स्थानों पर लिखा है।

वर्तमान में मैं परीक्षण द्वारा प्रत्येक पृष्ठ में प्रत्येक टेम्प्लेटेड क्षेत्र के पिक्सेल स्थिति लग रहा है और त्रुटि यह बहुत आसान हो सकता है अगर वहाँ पीडीएफ पेज में प्रत्येक फ़ील्ड का पिक्सेल स्थिति निर्धारित करने के लिए एक रास्ता है।

कोई भी सुझाव सबसे उपयोगी होगा।

धन्यवाद

उत्तर

4

जब मैं पीडीएफ तीव्र इस्तेमाल किया, मेरे दृष्टिकोण उपयोग XUnit struct बनाने के लिए और संदर्भ के लिए एक्स/Y पदों के लिए मेरी प्रारंभिक बिंदु के रूप दस्तावेज़ के ऊपरी बाएँ मोड़ था।

जाहिर है एक PdfPage पर प्रत्येक तत्व के लिए दस्तावेज़ (0,0) के ऊपर बाईं बिंदु संदर्भित गंदा मिल जाएगा। इसका मुकाबला करने के लिए, मैंने तत्वों के भीतर बैठने के लिए आयताकार बनाने के लिए एक्सआरक्ट कक्षा का उपयोग किया। एक बार XRect पृष्ठ पर खींचा जाने के बाद, आप XRect की गुणों के माध्यम से आयताकार की एक्स/वाई स्थिति को संदर्भित करने में सक्षम होते हैं। फिर उन निर्देशांकों और XRect की चौड़ाई/ऊंचाई का उपयोग करके कुछ मूल गणित के साथ, आप अगले तत्व की स्थिति के लिए निर्देशांक की गणना करने में सक्षम होना चाहिए जिसे आप पीडीएफपीज में जोड़ना चाहते हैं।

, इस कोड नमूने का पालन करें कि मैं क्या अंतिम परिणाम होगा की एक स्केच प्रदान की है। कोड अनचाहे है लेकिन अभी उत्पादन में कोड के आधार पर बहुत भारी है।

// Create a new PDF document 
PdfDocument document = new PdfDocument(); 

// Create an empty page with the default size/orientation 
PdfPage page = document.AddPage(); 
page.Orientation = PageOrientation.Landscape; 
page.Width = XUnit.FromMillimeter(300); 
page.Height = XUnit.FromMillimeter(200); 

// Get an XGraphics object for drawing 
XGraphics gfx = XGraphics.FromPdfPage(page); 

// Add the first rectangle 
XUnit horizontalOffset = XUnit.FromMillimeter(5); 
XUnit verticalOffset = XUnit.FromMillimeter(5); 
XUnit columnWidth = XUnit.FromMillimeter(100); 
XUnit columnHeight = page.Height - (2 * verticalOffset); 
XRect columnRect = new XRect(horizontalOffset, verticalOffset, columnWidth, columnHeight); 
gfx.DrawRectangle(XBrushes.Teal, columnRect); 

// Insert an image inside the rectangle, referencing the Left and Top properties of the rectangle for image placement 
XImage topLogo = XImage.FromFile(GetFilePath(@"content\img\pdfs\standard\logo-no-strapline.jpg")); // GetFilePath is a private method, not shown for brevity 
gfx.DrawImage(topLogo, 
    columnRect.Left + XUnit.FromMillimeter(5), 
    columnRect.Top + XUnit.FromMillimeter(5), 
    columnRect.Width - XUnit.FromMillimeter(10), 
    XUnit.FromMillimeter(38)); 

और उत्पादन: Mock up of the rendered output

अन्त में, मुझे यकीन है कि आप अवगत हैं कि, लेकिन वहाँ PdfSharp नमूने here का एक अच्छा संसाधन है।

0

पीडीएफ फाइलों में कोई पिक्सल नहीं है और कोई पिक्सेल स्थिति नहीं है।
आप पीडीएफ पेज प्रिंट कर सकते हैं ("वास्तविक आकार" आकार विकल्प का उपयोग करें) और एक शासक के साथ पदों को मापें (यह हमारे प्रिंटर के साथ बहुत अच्छा काम करता है)।
या आप पीडीएफ पृष्ठों पर वस्तुओं की स्थिति को मापने के लिए एडोब एक्रोबैट का उपयोग कर सकते हैं।

परीक्षण और त्रुटि के बारे में थोड़ी बनी हुई है के रूप में आप दे सकते हैं या आधे से एक मिलीमीटर लेने के लिए हो सकता है।
अपने शासक पर आप XUnit.FromMillimeter या XUnit.FromInch उपयोग कर सकते हैं PDFsharp के लिए बिंदु पदों पाने के लिए निर्भर करता है (लेकिन अंक नहीं पिक्सल हैं)।

वर्तमान PDFsharp नमूने यहां हैं:
http://www.pdfsharp.net/wiki/PDFsharpSamples.ashx

9

मैं के रूप में आप, josephj1989 एक ही मुद्दा था, और मैंने पाया कि मैं क्या हमारे जवाब होने के लिए विश्वास करते हैं।

PDFSharp दस्तावेज में this page के अनुसार,

PDFsharp का वर्तमान क्रियान्वयन ग्राफिक्स संदर्भ का केवल एक ही लेआउट है। मूल (0, 0) शीर्ष बाएं है और निर्देशांक दाएं और नीचे बढ़ते हैं। माप की इकाई हमेशा बिंदु (1/72 इंच) होती है।

तो, मैं कहता हूं कि मैं बाईं ओर से 3 इंच की छवि खींचना चाहता हूं और 7।एक 8.5 x 11 पृष्ठ के ऊपर से 5 इंच, तो मैं कुछ इस तरह करना होगा:

PdfDocument document = GetBlankPdfDocument(); 
PdfPage myPage = document.AddPage(); 
myPage.Orientation = PdfSharp.PageOrientation.Portrait; 
myPage.Width = XUnit.FromInch(8.5); 
myPage.Height = XUnit.FromInch(11); 
XImage myImage = GetSampleImage(); 

double myX = 3 * 72; 
double myY = 7.5 * 72; 
double someWidth = 126; 
double someHeight = 36; 

XGraphics gfx = XGraphics.FromPdfPage(myPage); 
gfx.DrawImage(myBarcode, myX, myY, someWidth, someHeight); 

मैं इस बाहर अपने आप को एक बारकोड छवि के साथ परीक्षण किया है, और मैंने पाया कि आप स्थिति को मापने के लिए उनके सूत्र का उपयोग करते हैं, आप एक इंच की 1/72 इंच अच्छी तरह से परिशुद्धता का स्तर प्राप्त कर सकते हैं। बुरा नहीं है।

तो, इस बिंदु पर, इस तरह के माप के लिए कुछ प्रकार के encapsulation बनाने के लिए अच्छा होगा ताकि हम अधिकतर काम पर ध्यान केंद्रित कर रहे हों, न कि रूपांतरण के विवरण।

public static double GetCoordinateFromInch(double inches) 
{ 
    return inches * 72; 
} 

हम इस तरह से अन्य सहायकों बनाने के लिए जा सकते हैं ...

public static double GetCoordinateFromCentimeter(double centimeters) 
{ 
    return centimeters * 0.39370 * 72; 
} 
इस तरह के सहायक तरीकों के साथ

, हम पिछले नमूना कोड के साथ ऐसा कर सकता है:

double myX = GetCoordinateFromInch(3); 
double myY = GetCoordinateFromInch(7.5); 
double someWidth = 126; 
double someHeight = 36; 

XGraphics gfx = XGraphics.FromPdfPage(myPage); 
gfx.DrawImage(myBarcode, myX, myY, someWidth, someHeight); 

मुझे आशा है कि यह मददगार है। मुझे यकीन है कि आप मेरे उदाहरण में क्या क्लीनर कोड लिखेंगे। इसके अतिरिक्त, इस प्रक्रिया को सुव्यवस्थित करने के लिए शायद अधिक चालाक तरीके हैं, लेकिन मैं बस यहां कुछ डालना चाहता था जो दस्तावेज़ीकरण में हमने जो देखा उसके तत्काल उपयोग करेंगे।

हैप्पी पीडीएफ रेंडरिंग!