gpt4 book ai didi

c# - PDFsharp - 如何创建第二页

转载 作者:太空狗 更新时间:2023-10-29 22:22:37 24 4
gpt4 key购买 nike

我在 PDFsharp 中找不到说明如何使用 C# 添加第二页的文档!

例如,在 VB6 中,我使用了一种名为 mjwPDF 的 PDF 创建方法。表示页面完成

objPDF.PDFEndPage

开始一个新页面:

objPDF.PDFNewPage

我的 PDFsharp 初始设置:

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

不幸的是,在 PDFsharp 中我无法找到如何在新页面上开始/书写。我看到了这些命令,但无法启动第二页。

document.AddPage();
document.InsertPage();

我已经尝试了这两种方法,但我的输出继续写在第 1 页,而不是第 2 页。

任何想法将不胜感激。

这是实际的代码:

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

这是我修改后的代码:

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

最佳答案

你创建一个新页面

document.AddPage();

然后调用

XGraphics.FromPdfPage(page);

获取第二页的 gfx 对象(可能这是缺少的步骤)。

因此,为每个新页面重复代码示例中的这些步骤:

// Create an empty page
PdfPage page = document.AddPage();

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

更新:在您的循环中,您执行以下操作:

document.AddPage();
XGraphics.FromPdfPage(page);

AddPage() 返回新创建页面的“句柄”——您将其放入垃圾箱。然后你调用“XGraphics.FromPdfPage()”为第一页创建另一个 gfx - 你也将把它扔进垃圾箱,但是你得到一个异常,因为第一页已经有一个 gfx。

一个小的改变就可以解决问题:

page = document.AddPage();
gfx = XGraphics.FromPdfPage(page);

另见: http://www.pdfsharp.net/wiki/PageSizes-sample.ashx

“我做梦也没想到添加第二页会如此困难!建议的代码不走运。”
PDFsharp 包括相当多的工作样本来帮助人们前进。建议的代码没有运气,因为您忽略了重要部分 - 方法返回的值。

关于c# - PDFsharp - 如何创建第二页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21143333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com