PDFsharp - so erstellen Sie eine 2. Seite
Ich kann nicht finden die Dokumentation im PDFsharp, um zu zeigen, wie Sie eine 2. Seite mit C#!
Als ein Beispiel, über in VB6 nutze ich ein PDF-Erstellungs-Methode genannt mjwPDF. Um anzugeben, dass die Seite fertig ist,
objPDF.PDFEndPage
Und eine neue Seite beginnen:
objPDF.PDFNewPage
Meine PDFsharp anfängliche Einstellungen:
//Create a new PDF document
PdfDocument document = new PdfDocument();
//Create an empty page
PdfPage page = document.AddPage();
//page.Contents.CreateSingleContent().Stream.UnfilteredValue;
//Get an XGraphics object for drawing
XGraphics gfx = XGraphics.FromPdfPage(page);
Leider in PDFsharp ich kann nicht herausfinden, wie start - /Schreibzugriff auf eine neue Seite. Ich sehe diese Befehle aber kann nicht eine zweite Seite gestartet.
document.AddPage();
document.InsertPage();
Habe ich versucht, diese beiden aber meine Ausgabe weiter schreibt Sie auf Seite 1 und nicht Seite 2.
Irgendwelche Ideen würde sehr geschätzt werden.
Hier ist der aktuelle code:
private void buttonPrint_Click(object sender, EventArgs e)
{
//Create a new PDF document
PdfDocument document = new PdfDocument();
//Create an empty page
PdfPage page = document.AddPage();
//page.Contents.CreateSingleContent().Stream.UnfilteredValue;
//Get an XGraphics object for drawing
XGraphics gfx = XGraphics.FromPdfPage(page);
XPdfFontOptions options = new XPdfFontOptions(PdfFontEncoding.Unicode, PdfFontEmbedding.Always);
//Create a font
XFont fontArial20 = new XFont("Arial", 20, XFontStyle.Bold, options);
XFont fontArial14 = new XFont("Arial", 14, XFontStyle.Regular, options);
XFont fontArial14Bold = new XFont("Arial", 14, XFontStyle.Bold, options);
XFont fontArial10 = new XFont("Arial", 10, XFontStyle.Regular, options);
XFont fontArial10Bold = new XFont("Arial", 10, XFontStyle.Bold, options);
XFont fontArial9 = new XFont("Arial", 9, XFontStyle.Regular, options);
XFont fontArial9Bold = new XFont("Arial", 9, XFontStyle.Bold, options);
XFont fontArial8 = new XFont("Arial", 8, XFontStyle.Regular, options);
XFont fontArial8Bold = new XFont("Arial", 8, XFontStyle.Bold, options);
XFont fontCour10 = new XFont("Courier New", 10, XFontStyle.Regular, options);
XFont fontCour10Bold = new XFont("Courier New", 10, XFontStyle.Bold, options);
XFont printFontCour8 = new XFont("Courier New", 8, XFontStyle.Regular);
XFont printFontCour8Bold = new XFont("Courier New", 8, XFontStyle.Bold);
XFont printFontCour8Italic = new XFont("Courier New", 8, XFontStyle.Italic);
XFont printFontCour10 = new XFont("Courier New", 10, XFontStyle.Regular);
XFont printFontCour10Bold = new XFont("Courier New", 10, XFontStyle.Bold);
XFont printFontCour14 = new XFont("Courier New", 14, XFontStyle.Bold);
XFont printFontCour10BoldItalic = new XFont("Courier New", 10, XFontStyle.Bold | XFontStyle.Italic);
XFont printFontArial8 = new XFont("Arial", 8, XFontStyle.Regular);
XFont printFontArial10 = new XFont("Arial", 10, XFontStyle.Regular);
XFont printFontArial10Bold = new XFont("Arial", 10, XFontStyle.Bold);
XFont printFontArial14 = new XFont("Arial", 14, XFontStyle.Bold);
//Create pen.
Pen blackPen = new Pen(Color.Black, 3);
Pen blackPen3 = new Pen(Color.Black, 3);
Pen blackPen1 = new Pen(Color.Black, 1);
Pen greyPen1 = new Pen(Color.Gray, 1);
Pen greyPen3 = new Pen(Color.Gray, 3);
Pen lightgreyPen1 = new Pen(Color.LightGray, 1);
//define margins
double leftMargin = 40.0;
double rightMargin = 570.0;
double topMargin = 20.0;
double lineTop = 0d;
double lineFooter = 780d;
double rowStep = 12d;
//double rowStep = 15d;
double newRow = topMargin + rowStep;
double beginRow = newRow;
double currentRow = beginRow;
double currentRowCol2 = 0;
double firstCustomerRow = 100d;
//double firstCustomerRow = 110d;
//float firstCustomerRow = 120;
double txtShift = 8d;
string hcString = string.Empty; //---added 6-26-13
//---top section--------------------------------------------------------
//draw the TIW Logo
Image Logo = Image.FromFile(Settings.Default.LogoPath);
gfx.DrawImage(Logo, leftMargin, topMargin);
//title & version
string textToPrint = "TIW Purchasing - Master Buy List";
gfx.DrawString(textToPrint, fontArial14Bold, Brushes.Black, leftMargin + 160, topMargin + 30);
string eiNum = listView1.Items[0].Text;
string eiDesc = listView1.Items[0].SubItems[1].Text;
string partNum = listView1.Items[0].SubItems[2].Text;
string partDesc = listView1.Items[0].SubItems[3].Text;
string price = listView1.Items[0].SubItems[4].Text;
string partType = listView1.Items[0].SubItems[5].Text;
string partQty = listView1.Items[0].SubItems[6].Text;
if (eiDesc.Length > 80)
eiDesc = eiDesc.Substring(0, 80) + "...";
textToPrint = eiNum + " - " + eiDesc;
gfx.DrawString(textToPrint, fontArial10Bold, Brushes.Black, leftMargin, topMargin + 70);
int lineInc = 70;
for (int i = 0; i < listView1.Items.Count; i++)
{
if (listView1.Items[i].Text == eiNum)
{
lineInc = lineInc + 12;
if (lineInc >= 480)
{
//PdfPage page2 = document.AddPage();
document.AddPage();
XGraphics.FromPdfPage(page);
//title & version
textToPrint = "TIW Purchasing - Master Buy List - (continued)";
gfx.DrawString(textToPrint, fontArial14Bold, Brushes.Black, leftMargin + 160, topMargin + 30);
lineInc = 70;
}
partNum = listView1.Items[i].SubItems[2].Text;
partDesc = listView1.Items[i].SubItems[3].Text;
price = listView1.Items[i].SubItems[4].Text;
partType = listView1.Items[i].SubItems[5].Text;
partQty = listView1.Items[i].SubItems[6].Text;
textToPrint = partNum;
gfx.DrawString(textToPrint, fontArial10, Brushes.Black, leftMargin + 10, topMargin + lineInc);
//textToPrint = partDesc.Substring(0, 50);
textToPrint = partDesc;
gfx.DrawString(textToPrint, fontArial10, Brushes.Black, leftMargin + 70, topMargin + lineInc);
textToPrint = price;
gfx.DrawString(textToPrint, fontArial10, Brushes.Black, leftMargin + 450, topMargin + lineInc);
textToPrint = partType;
gfx.DrawString(textToPrint, fontArial10, Brushes.Black, leftMargin + 470, topMargin + lineInc);
textToPrint = partQty;
gfx.DrawString(textToPrint, fontArial10, Brushes.Black, leftMargin + 490, topMargin + lineInc);
}
else
{
lineInc = lineInc + 16;
eiNum = listView1.Items[i].Text;
eiDesc = listView1.Items[i].SubItems[1].Text;
if (eiDesc.Length > 80)
eiDesc = eiDesc.Substring(0, 80) + "...";
textToPrint = eiNum + " - " + eiDesc;
gfx.DrawString(textToPrint, fontArial10Bold, Brushes.Black, leftMargin, topMargin + lineInc);
lineInc = lineInc + 12;
partNum = listView1.Items[i].SubItems[2].Text;
partDesc = listView1.Items[i].SubItems[3].Text;
price = listView1.Items[i].SubItems[4].Text;
partType = listView1.Items[i].SubItems[5].Text;
partQty = listView1.Items[i].SubItems[6].Text;
textToPrint = partNum;
gfx.DrawString(textToPrint, fontArial10, Brushes.Black, leftMargin + 10, topMargin + lineInc);
//textToPrint = partDesc.Substring(0, 20);
textToPrint = partDesc;
gfx.DrawString(textToPrint, fontArial10, Brushes.Black, leftMargin + 70, topMargin + lineInc);
textToPrint = price;
gfx.DrawString(textToPrint, fontArial10, Brushes.Black, leftMargin + 450, topMargin + lineInc);
textToPrint = partType;
gfx.DrawString(textToPrint, fontArial10, Brushes.Black, leftMargin + 470, topMargin + lineInc);
textToPrint = partQty;
gfx.DrawString(textToPrint, fontArial10, Brushes.Black, leftMargin + 490, topMargin + lineInc);
}
}
//------ footer
DateTime dateTime = DateTime.Now;
String.Format("{0:F}", dateTime);
textToPrint = "eView " + EViewMethods.eviewVersion + " " + Environment.UserName + " " + String.Format("{0:F}", dateTime);
gfx.DrawString(textToPrint, printFontCour8Italic, Brushes.Black, leftMargin, lineFooter);
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "pdf files (*.pdf)|*.pdf|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
document.Save(saveFileDialog1.FileName);
Process.Start(saveFileDialog1.FileName);
}
}
Hier ist mein korrigierter code:
private void createPDF()
{
//Create a new PDF document
PdfDocument document = new PdfDocument();
//Create an empty page
PdfPage page = document.AddPage();
//Get an XGraphics object for drawing
XGraphics gfx = XGraphics.FromPdfPage(page);
XPdfFontOptions options = new XPdfFontOptions(PdfFontEncoding.Unicode, PdfFontEmbedding.Always);
//Create fonts
XFont printFontArial8 = new XFont("Arial", 8, XFontStyle.Regular);
XFont printFontArial10 = new XFont("Arial", 10, XFontStyle.Regular);
XFont printFontArial10Bold = new XFont("Arial", 10, XFontStyle.Bold);
XFont printFontCour10BoldItalic = new XFont("Courier New", 10, XFontStyle.Bold | XFontStyle.Italic);
XFont printFontArial14 = new XFont("Arial", 14, XFontStyle.Bold);
XFont printFontCour8 = new XFont("Courier New", 8, XFontStyle.Regular);
//Create pen.
Pen blackPen = new Pen(Color.Black, 3);
float lineInc = 20.0f;
//--------------------------------------------
//define margins
double leftMargin = 40.0;
//double rightMargin = 570.0;
double topMargin = 20.0;
//double lineTop = 0d;
//double lineFooter = 780d;
string eiNum = string.Empty;
string eiDesc = string.Empty;
string partNum = string.Empty;
string partDesc = string.Empty;
string price = string.Empty;
string partType = string.Empty;
string partQty = string.Empty;
string thisEndItem = string.Empty;
string textToPrint = string.Empty;
int pageCounter = 0;
string filename = string.Empty;
bool morePages = true;
while (morePages)
{
if (pageCounter == 0 && counter == 0)
{
//draw image/logo
Image Logo = Image.FromFile(Settings.Default.LogoPath);
gfx.DrawImage(Logo, leftMargin, 35f);
//draw title
textToPrint = "TIW Purchasing - Master Buy List";
gfx.DrawString(textToPrint, printFontArial14, Brushes.Black, leftMargin + 160f, 54f);
//date
DateTime thisDay = DateTime.Today;
textToPrint = thisDay.ToString("d");
gfx.DrawString(textToPrint, printFontArial10, Brushes.Black, leftMargin + 280f, 76f);
eiNum = listView1.Items[0].Text;
eiDesc = listView1.Items[0].SubItems[1].Text;
if (eiDesc.Length > 80)
eiDesc = eiDesc.Substring(0, 80) + "...";
textToPrint = eiNum + " - " + eiDesc;
gfx.DrawString(textToPrint, printFontArial10Bold, Brushes.Black, leftMargin, topMargin + 90);
}
else if (pageCounter > 0)
{
double remainder = counter % amtperpage;
if (remainder == 0) //---means we're at the top of the page
{
//title & version
textToPrint = "TIW Purchasing - Master Buy List";
gfx.DrawString(textToPrint, printFontArial10Bold, Brushes.Black, leftMargin + 120, 54f);
textToPrint = "(continued from page " + page + ")";
gfx.DrawString(textToPrint, printFontArial10, Brushes.Black, leftMargin + 400, 54f);
}
}
if (pageCounter == 0)
lineInc = 90;
else
lineInc = 78;
int stop = counter + amtperpage;
if (stop > listView1.Items.Count)
stop = listView1.Items.Count;
while (counter < stop)
{
thisEndItem = listView1.Items[counter].SubItems[0].Text;
partNum = listView1.Items[counter].SubItems[2].Text;
partDesc = listView1.Items[counter].SubItems[3].Text;
price = listView1.Items[counter].SubItems[4].Text;
partType = listView1.Items[counter].SubItems[5].Text;
partQty = listView1.Items[counter].SubItems[6].Text;
if (thisEndItem == eiNum) //---still working on the same end item
{
lineInc += 12;
textToPrint = partNum;
gfx.DrawString(textToPrint, printFontArial10, Brushes.Black, leftMargin + 10, topMargin + lineInc);
if (partDesc.Length > 70)
partDesc = partDesc.Substring(0, 70) + "...";
textToPrint = partDesc;
gfx.DrawString(textToPrint, printFontArial10, Brushes.Black, leftMargin + 70, topMargin + lineInc);
textToPrint = price;
gfx.DrawString(textToPrint, printFontArial10, Brushes.Black, leftMargin + 600, topMargin + lineInc);
textToPrint = partType;
gfx.DrawString(textToPrint, printFontArial10, Brushes.Black, leftMargin + 630, topMargin + lineInc);
textToPrint = partQty;
gfx.DrawString(textToPrint, printFontArial10, Brushes.Black, leftMargin + 670, topMargin + lineInc);
}
else //---starting a new end item
{
lineInc += 16;
eiNum = listView1.Items[counter].Text;
eiDesc = listView1.Items[counter].SubItems[1].Text;
if (eiDesc.Length > 80)
eiDesc = eiDesc.Substring(0, 80) + "...";
textToPrint = eiNum + " - " + eiDesc;
gfx.DrawString(textToPrint, printFontArial10Bold, Brushes.Black, leftMargin, topMargin + lineInc);
}
counter++;
}
//---footer-------------------------------
DateTime dateTime = DateTime.Now;
textToPrint = "eView " + EViewMethods.eviewVersion + " " + Environment.UserName + " " + String.Format("{0:F}", dateTime);
gfx.DrawString(textToPrint, printFontCour8, Brushes.Black, leftMargin, 1060f);
printpagenum = pageCounter + 1;
textToPrint = printpagenum.ToString();
gfx.DrawString(textToPrint, printFontArial10Bold, Brushes.Black, leftMargin + 740, 1060f);
//----------------------------------------
if (counter == listView1.Items.Count)
{
morePages = false;
}
else
{
pageCounter++;
page = document.AddPage();
gfx = XGraphics.FromPdfPage(page);
}
}
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "pdf files (*.pdf)|*.pdf|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
document.Save(saveFileDialog1.FileName);
Process.Start(saveFileDialog1.FileName);
}
}
InformationsquelleAutor Bob T | 2014-01-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie eine neue Seite mit
dann rufen Sie
bekommen eine gfx-Objekt für die zweite Seite (wahrscheinlich ist der fehlende Schritt).
So wiederholen Sie die Schritte aus dem code-Beispiel für jede neue Seite:
Update: In der Schleife, die Sie tun, die folgenden:
AddPage() liefert einen "handle" auf die neu erstellte Seite, die Sie werfen in den Papierkorb.
Dann rufen Sie "XGraphics.FromPdfPage()" zu erstellen noch eine andere gfx für die erste Seite - die würden Sie auch werfen in den Papierkorb, aber Sie eine Ausnahme, da es schon ein gfx für die erste Seite.
Einer kleinen änderung sollte den trick tun:
Siehe auch:
http://www.pdfsharp.net/wiki/PageSizes-sample.ashx
"Ich habe nie davon geträumt, das hinzufügen einer zweiten Seite könnte so schwer sein! Kein Glück mit den vorgeschlagenen code."
PDFsharp enthält durchaus ein paar funktionierende Beispiele, um die Menschen zu gehen. Kein Glück mit den vorgeschlagenen code, da Sie ignoriert den wichtigen Teil - die Werte, die von den Methoden.
Jetzt bin ich versucht, herauszufinden, wie zu entsorgen die XGraphics.
Ich habe nie davon geträumt, das hinzufügen einer zweiten Seite könnte so schwer sein! Kein Glück mit den vorgeschlagenen code.
Aktualisiert meine Antwort.
PDFsharp kommt mit MigraDoc. Mit MigraDoc fügen Sie Absätze, um Ihr Dokument und lassen Sie dann die MigraDoc fügen Sie die Seite bricht beim erstellen einer PDF-Datei. PDFsharp ist die low-level-Werkzeug, das Ihnen die volle Kontrolle - aber Sie müssen auch hinzufügen, Zeilenumbrüche und Seitenumbrüche. pdfsharp.net/wiki/MigraDocSamples.ashx
InformationsquelleAutor Vive la déraison
Vergessen Sie nicht, aktualisieren Sie Ihre "Leinwand" oder "graphics" Objekt-variable auf die neue Seite:
Ihnen möglicherweise etwas wie dies:
Und, es sollte etwas sein wie:
Ich auch diesen Fehler.
InformationsquelleAutor umlcat
drucken können Sie mehrere Seiten durch eine Verringerung der Größe der "Ypoint", wie unten gezeigt-code.
seine VORGEGEBENE Wert ist "yPoint = yPoint + 40"
ändern Sie es auf "yPoint = yPoint + 8" ich.e-Schrittweite ypoint von +8 in jeder loop-iteration,
Antworten für irgendwelche Zweifel.
siehe while-Schleife unten
Grüße,
Shivanand
InformationsquelleAutor Shivanand
Bevor Sie versuchen, erstellen Sie eine neue XGraphics-Objekt für die neue Seite, die Entsorgung der alten vorhandenen Objekt:
Vielen Dank für die Technik! Es scheint, dass wenn ich ein neues gfx-es muss einen anderen Namen, d.h., gfx, gfx1, gfx2,...etc. Dieses Programm könnte auch eine riesige Liste erfordern würde, dass viele gfx1-gfx100. Es würde schwer sein, um ein Programm (sp?) erstellen Sie die neue gfx ' s, denn ich glaube nicht, können Sie deklarieren Sie eine neue "XGraphics gfx = Xgraphics.FromPdfPage(Seite);" wo ich den Namen einer Variablen für die neue gfx. Wenn ich lese Ihren Kommentar richtig Sie sein könnte mir zu sagen, dass die xgrObject.Dispose() wird mir erlauben, verwenden Sie den gleichen "gfx", wenn man erklärt, eine neue!?!
Statt zu schreiben "XGraphics gfx = Xgraphics.FromPdfPage(Seite);" können Sie einfach zu schreiben, "gfx = Xgraphics.FromPdfPage(Seite);" und re-verwenden Sie die variable, die Sie bereits haben. Siehe die andere Antwort weiter oben: "Dispose()" ist nicht das problem, Sie verwenden die falsche "Seite" Objekt und versuchen, erstellen Sie eine zweite gfx für die erste Seite, wo Sie sollten die ersten gfx für die zweite Seite.
Ich bin verzetteln mit einem anderen problem und nicht in der Lage, wieder zu diesem problem noch. Ich werde dieses Wochenende und Versuch, um zu versuchen Ihre Techniken.
InformationsquelleAutor Vicky P