2017-03-13 3 views
0

Angesichts einer vorhandenen PDF mit vielen verschiedenen Seitengrößen und Ausrichtungen muss mein Programm eine einzelne Textzeile in der Mitte jeder der vier Kanten auf der Seite platzieren, gedreht für diese Seitenkante. Ich verwende PDFsharp mit C#.PDFsharp Vertikaler Text auf der Seite der Seite

Für den unteren Rand der Seite, brauche ich keinen Text Rotation und es funktioniert super:

// Font for added margin text. 
XFont xf = new XFont("Arial", 10, XFontStyle.Bold); 

// String format to place at bottom center. 
XStringFormat sf = new XStringFormat(); 
sf.Alignment = XStringAlignment.Center; 
sf.LineAlignment = XLineAlignment.Far; 

using (PdfDocument pdfdOut = new PdfDocument()) 
{ 
using (PdfDocument pdfdIn = PdfReader.Open(sInPdfPath, PdfDocumentOpenMode.Import)) 
    for (int iInPageNo = 0; iInPageNo < pdfdIn.PageCount; iInPageNo++) 
    { 
    PdfPage pdfpOut = pdfdOut.AddPage(pdfdIn.Pages[iInPageNo]); 
    using (XGraphics xg = XGraphics.FromPdfPage(pdfpOut, XGraphicsPdfPageOptions.Append)) 
    { 
    XRect xr = pdfpOut.MediaBox.ToXRect(); 
    xg.DrawString("Bottom Centered Text", xf, XBrushes.Red, xr, sf); 
    } 
    } // for iInPageNo, using pdfdIn 
// ...save the output PDF here... 
} // using pdfdOut 

Wenn ich versuche, auf der linken Seite der Seite zentriert vertikalen Text zu platzieren, geht es los Seite für Hochformat-Seiten und ist zu weit vom Rand für Landschafts Seiten:

using (XGraphics xg = XGraphics.FromPdfPage(pdfpOut, XGraphicsPdfPageOptions.Append)) 
{ 
// Rotate graphics 90 degrees around the center of the page. 
xg.RotateAtTransform(90, new XPoint(xg.PageSize.Width/2d, xg.PageSize.Height/2d)); 
XRect xr = pdfpOut.MediaBox.ToXRect(); 
xg.DrawString("Left Centered Text", xf, XBrushes.Red, xr, sf); 
} 

ich argumentierte, dass die XRect benötigt, um seine Breite und Höhe vertauscht haben, aber ich habe nie meine links zentriert Text sehen, wenn ich das tun:

XRect xr = New XRect(pdfpOut.MediaBox.ToXRect().Height, pdfpOut.MediaBox.ToXRect().Width); 

Die MediaBox hat die gleichen Abmessungen wie die PageSize.

Zum Testen habe ich den XRect angezeigt, um zu wissen, was vor sich geht. Aber ich kann einfach nicht bekomme es das gleiche wie ohne Drehung mit der Drehung zu suchen:

xg.DrawRectangle(XPens.Red, xr); 

Antwort

0

Mit PDFsharp bis zur Version 1.50 Beta 3b es ein bekanntes Problem ist, wenn PDF-Dateien öffnen, die Seiten im Querformat hat. Ich würde empfehlen, drei Zeilen zu entfernen, wie in diesem Beitrag im PDFsharp-Forum gezeigt:
http://forum.pdfsharp.net/viewtopic.php?p=9591#p9591 Einfach nichts tun innerhalb internal PdfPage(PdfDictionary dict). Ich empfehle, das Quellpaket herunterzuladen, die C# -Projekte in Ihrer Lösung zu referenzieren und die Änderung am Code vorzunehmen.

Wenn Sie die Breite und Höhe des Rechtecks ​​vertauschen, vergewissern Sie sich, dass Sie auch die Mitte der Drehung beim Aufruf von RotateAtTransform aktualisieren.

Verwandte Themen