C# PDF Sharp posizione nel documento

Ciao io sto usando PDF sharp per l’utente stampa di ingresso su posizioni in un modello di documento.

I dati (campi) vengono raccolti da un utente (pagina web) e scritto in posizioni appropriate sul documento mediante coulisse metodo.

Attualmente sto trovando la posizione in Pixel di ogni stampo campo in ogni pagina di prova ed errore .Sarebbe molto più facile se c’è un modo per determinare la posizione in pixel di ogni campo nella pagina in formato pdf.

Qualsiasi suggerimento sarebbe più utile.

grazie

 

3 Replies
  1. 12

    Ho avuto lo stesso problema come voi, josephj1989, e ho trovato quella che credo essere la nostra risposta.

    Secondo questa pagina in PDFSharp documentazione,

    L’implementazione corrente di PDFsharp ha un solo layout della grafica contesto. L’origine (0, 0) è in alto a sinistra e coordinate crescere a destra e in basso. L’unità di misura è sempre il punto (1/72 di pollice).

    Così, supponiamo di voler disegnare un’immagine di 3 pollici da sinistra e 7,5 pollici dalla parte superiore di un 8,5 x 11 pagina, quindi vorrei fare qualcosa di simile a questo:

    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);

    Ho provato questo fuori di me con una immagine del codice a barre, e ho scoperto che quando si utilizza la loro formula per misurare il posizionamento, è possibile ottenere un livello di precisione, beh, a 1/72 di pollice. Che non è male.

    Quindi, a questo punto, sarebbe bello creare un qualche tipo di incapsulamento per tali misure in modo che siamo concentrati principalmente sul compito a portata di mano e non i dettagli della conversione.

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

    Potremmo andare a fare altri aiutanti in questo modo…

    public static double GetCoordinateFromCentimeter(double centimeters)
    {
      return centimeters * 0.39370 * 72;
    }

    Con tali metodi di supporto, si potrebbe fare questo con il codice di esempio precedente:

    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);

    Spero che questo sia utile. Sono sicuro che sarà di scrivere codice più rispetto a ciò che è nel mio esempio. Inoltre, ci sono probabilmente molto più intelligenti modi per semplificare questo processo, ma volevo metterci qualcosa che vorresti fare uso immediato di ciò che abbiamo visto nella documentazione.

    Felice di Rendering dei PDF!

  2. 5

    Quando ho usato il PDF Sharp, il mio approccio è stato quello di utilizzare il XUnit struct e per di riferimento il punto superiore sinistro del documento come punto di partenza per X/Y posizioni.

    Ovviamente fa riferimento il punto superiore sinistro del documento (0,0) per ogni elemento della PdfPage sarà ottenere disordinato. Per combattere questo, ho usato il XRect classe per creare rettangoli per elementi per sedersi all’interno. Una volta che il XRect è disegnato sulla pagina, quindi siete in grado di fare riferimento la posizione X/Y del rettangolo via XRect proprietà. Poi con alcuni matematica di base utilizzando queste coordinate e la larghezza/altezza del XRect, si dovrebbe essere in grado di calcolare le coordinate della posizione dell’elemento successivo che si desidera aggiungere al PdfPage.

    Seguire questo esempio di codice, ho fornito un abbozzo di quello che il risultato finale sarebbe. Il codice non è testato, ma è fortemente basata su codice in produzione in questo momento.

    //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));

    E l’output:
    C# PDF Sharp posizione nel documento

    Infine, sono sicuro che siete a conoscenza, ma c’è una buona risorsa di PdfSharp campioni qui.

  3. 0

    PDF file non hanno nessun pixel e nessun pixel posizioni.

    È possibile stampare pagine in formato PDF (utilizzare la “dimensione Reale” opzione di dimensione) e misura le posizioni con un righello (questo funziona abbastanza bene con le nostre stampanti).

    Oppure è possibile utilizzare Adobe Acrobat per misurare le posizioni di oggetti sulle pagine PDF.

    Un po ‘ di tentativi ed errori, rimane, come si può dare o prendere la metà di un millimetro.

    A seconda del righello è possibile utilizzare XUnit.FromMillimeter o XUnit.FromInch per ottenere il punto di posizioni per PDFsharp (ma i punti non sono pixel).

    Corrente PDFsharp campioni sono qui:

    http://www.pdfsharp.net/wiki/PDFsharpSamples.ashx

Lascia un commento