问题描述
我找不到PDFsharp文档说明了如何使用C#添加第2页!
作为一个例子,比VB6我使用PDF创建方法所谓mjwPDF。为了表明该页面已完成
objPDF.PDFEndPage
和开始一个新的页面:
objPDF.PDFNewPage
我PDFsharp初始设置:
//创建一个新的PDF文档
PdfDocument文档=新PdfDocument();
//创建一个空白页
PdfPage页= document.AddPage();
//page.Contents.CreateSingleContent().Stream.UnfilteredValue;
//获取绘图
XGraphics GFX = XGraphics.FromPdfPage(页)的XGraphics对象;
不幸的是PDFsharp我无法找出如何在新页面上开始/写。我看到这些命令,但不能获得第二页开始
document.AddPage();
document.InsertPage();
我已经试过这两个,但我的产量继续第1页,而不是2页上写字。
任何想法,将不胜感激。
下面是实际的代码:
私人无效buttonPrint_Click(对象发件人,EventArgs五)
{
//创建一个新的PDF文档
PdfDocument文档=新PdfDocument();
//创建一个空白页
PdfPage页= document.AddPage();
//page.Contents.CreateSingleContent().Stream.UnfilteredValue;
//获取绘图
XGraphics GFX = XGraphics.FromPdfPage(页)的XGraphics对象;
XPdfFontOptions选项=新XPdfFontOptions(PdfFontEncoding.Unicode,PdfFontEmbedding.Always);
//创建一个字体
XFont fontArial20 =新XFont(宋体,20,XFontStyle.Bold,期权);
XFont fontArial14 =新XFont(宋体,14,XFontStyle.Regular,期权);
XFont fontArial14Bold =新XFont(宋体,14,XFontStyle.Bold,期权);
XFont fontArial10 =新XFont(宋体,10,XFontStyle.Regular,期权);
XFont fontArial10Bold =新XFont(宋体,10,XFontStyle.Bold,期权);
XFont fontArial9 =新XFont(宋体,9,XFontStyle.Regular,期权);
XFont fontArial9Bold =新XFont(宋体,9,XFontStyle.Bold,期权);
XFont fontArial8 =新XFont(宋体,8,XFontStyle.Regular,期权);
XFont fontArial8Bold =新XFont(宋体,8,XFontStyle.Bold,期权);
XFont fontCour10 =新XFont(宋体,10,XFontStyle.Regular,期权);
XFont fontCour10Bold =新XFont(宋体,10,XFontStyle.Bold,期权);
XFont printFontCour8 =新XFont(宋体,8,XFontStyle.Regular);
XFont printFontCour8Bold =新XFont(宋体,8,XFontStyle.Bold);
XFont printFontCour8Italic =新XFont(宋体,8,XFontStyle.Italic);
XFont printFontCour10 =新XFont(宋体,10,XFontStyle.Regular);
XFont printFontCour10Bold =新XFont(宋体,10,XFontStyle.Bold);
XFont printFontCour14 =新XFont(宋体,14,XFontStyle.Bold);
XFont printFontCour10BoldItalic =新XFont(宋体,10,XFontStyle.Bold | XFontStyle.Italic);
XFont printFontArial8 =新XFont(宋体,8,XFontStyle.Regular);
XFont printFontArial10 =新XFont(宋体,10,XFontStyle.Regular);
XFont printFontArial10Bold =新XFont(宋体,10,XFontStyle.Bold);
XFont printFontArial14 =新XFont(宋体,14,XFontStyle.Bold);
//创建笔。
笔blackPen =新朋(Color.Black,3);
笔blackPen3 =新朋(Color.Black,3);
笔blackPen1 =新朋(Color.Black,1);
笔greyPen1 =新朋(Color.Gray,1);
笔greyPen3 =新朋(Color.Gray,3);
笔lightgreyPen1 =新朋(Color.LightGray,1);
//定义利润率
双LEFTMARGIN = 40.0;
双rightMargin = 570.0;
双TOPMARGIN = 20.0;
双lineTop = 0D;
双lineFooter = 780D;
双rowStep = 12D;
//双rowStep = 15D;
双NEWROW = TOPMARGIN + rowStep;
双beginRow = NEWROW;
双currentRow = beginRow;
双currentRowCol2 = 0;
双firstCustomerRow = 100D;
//双firstCustomerRow = 110D;
//浮动firstCustomerRow = 120;
双txtShift = 8D;
串hcString =的String.Empty; // ---加13年6月26日
// ---顶部------------------------ --------------------------------
//绘制TIW标志
形象标志=图片.FromFile(Settings.Default.LogoPath);
gfx.DrawImage(徽标,LEFTMARGIN,TOPMARGIN);
//标题和放大器;版本
串textToPrint =TIW采购 - 主推荐表;
gfx.DrawString(textToPrint,fontArial14Bold,Brushes.Black,LEFTMARGIN + 160,+ TOPMARGIN 30);
串eiNum = listView1.Items [0]。文本;
串eiDesc = listView1.Items [0] .SubItems [1]。文本;
串partNum = listView1.Items [0] .SubItems [2]。文本;
串partDesc = listView1.Items [0] .SubItems [3]。文本;
串价格= listView1.Items [0] .SubItems [4]。文本;
串partType = listView1.Items [0] .SubItems [5]。文本;
串partQty = listView1.Items [0] .SubItems [6]。文本;
如果(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;我++)
{
如果(listView1.Items [I]。文本== eiNum)
{
lineInc = lineInc + 12;
如果(lineInc> = 480)
{
// PdfPage第2页= document.AddPage();
document.AddPage();
XGraphics.FromPdfPage(页);
//标题和放大器;版本
textToPrint =TIW采购 - 主买入名单 - (续);
gfx.DrawString(textToPrint,fontArial14Bold,Brushes.Black,LEFTMARGIN + 160,+ TOPMARGIN 30);
lineInc = 70;
}
partNum = listView1.Items [I] .SubItems [2]。文本;
partDesc = listView1.Items [I] .SubItems [3]。文本;
价格= listView1.Items [I] .SubItems [4]。文本;
partType = listView1.Items [I] .SubItems [5]。文本;
partQty = listView1.Items [I] .SubItems [6]。文本;
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 =价格;
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);
}
,否则
{
lineInc = lineInc + 16;
eiNum = listView1.Items [I]。文本;
eiDesc = listView1.Items [I] .SubItems [1]。文本;
如果(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]。文本;
partDesc = listView1.Items [I] .SubItems [3]。文本;
价格= listView1.Items [I] .SubItems [4]。文本;
partType = listView1.Items [I] .SubItems [5]。文本;
partQty = listView1.Items [I] .SubItems [6]。文本;
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 =价格;
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);
}
}
// ------页脚
日期时间日期时间= DateTime.Now;
的String.Format({0:F},日期时间);
textToPrint =eView的+ EViewMethods.eviewVersion ++ Environment.UserName ++的String.Format({0:F},日期时间);
gfx.DrawString(textToPrint,printFontCour8Italic,Brushes.Black,LEFTMARGIN,lineFooter);
SaveFileDialog saveFileDialog1 =新SaveFileDialog();
saveFileDialog1.Filter =PDF文件(* .PDF)| * .PDF |所有文件| *。*(*。*)。
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.RestoreDirectory = TRUE;
如果(saveFileDialog1.ShowDialog()== DialogResult.OK)
{
document.Save(saveFileDialog1.FileName);
的Process.Start(saveFileDialog1.FileName);
}
}
下面是我纠正代码:
私人无效createPDF()
{
//创建一个新的PDF文档
PdfDocument文档=新PdfDocument() ;
//创建一个空白页
PdfPage页= document.AddPage();
//获取绘图
XGraphics GFX = XGraphics.FromPdfPage(页)的XGraphics对象;
XPdfFontOptions选项=新XPdfFontOptions(PdfFontEncoding.Unicode,PdfFontEmbedding.Always);
//创建字体
XFont printFontArial8 =新XFont(宋体,8,XFontStyle.Regular);
XFont printFontArial10 =新XFont(宋体,10,XFontStyle.Regular);
XFont printFontArial10Bold =新XFont(宋体,10,XFontStyle.Bold);
XFont printFontCour10BoldItalic =新XFont(宋体,10,XFontStyle.Bold | XFontStyle.Italic);
XFont printFontArial14 =新XFont(宋体,14,XFontStyle.Bold);
XFont printFontCour8 =新XFont(宋体,8,XFontStyle.Regular);
//创建笔。
笔blackPen =新朋(Color.Black,3);
浮动lineInc = 20.0f;
// --------------------------------------------
//定义利润率
双LEFTMARGIN = 40.0;
//双rightMargin = 570.0;
双TOPMARGIN = 20.0;
//双lineTop = 0D;
//双lineFooter = 780D;
串eiNum =的String.Empty;
串eiDesc =的String.Empty;
串partNum =的String.Empty;
串partDesc =的String.Empty;
串价格=的String.Empty;
串partType =的String.Empty;
串partQty =的String.Empty;
串thisEndItem =的String.Empty;
串textToPrint =的String.Empty;
INT pageCounter = 0;
字符串文件名=的String.Empty;
布尔morePages = TRUE;
,而(morePages)
{
如果(pageCounter == 0安培;&安培;反== 0)
{
//绘制图像/标志
形象标志= Image.FromFile(Settings.Default.LogoPath);
gfx.DrawImage(徽标,LEFTMARGIN,35F);
//绘制标题
textToPrint =TIW采购 - 主推荐表;
gfx.DrawString(textToPrint,printFontArial14,Brushes.Black,LEFTMARGIN + 160F,54F);
//日期
的DateTime THISDAY = DateTime.Today;
textToPrint = thisDay.ToString(D);
gfx.DrawString(textToPrint,printFontArial10,Brushes.Black,LEFTMARGIN + 280F,76F);
eiNum = listView1.Items [0]。文本;
eiDesc = listView1.Items [0] .SubItems [1]。文本;
如果(eiDesc.Length> 80)
eiDesc = eiDesc.Substring(0,80)+...;
textToPrint = eiNum + - + eiDesc;
gfx.DrawString(textToPrint,printFontArial10Bold,Brushes.Black,LEFTMARGIN,TOPMARGIN + 90);
}
,否则如果(pageCounter大于0)
{
双余数=计%amtperpage;
如果(余== 0)// ---意味着我们在页面
{
//标题及功放的顶部;版本
textToPrint =TIW采购 - 主推荐表;
gfx.DrawString(textToPrint,printFontArial10Bold,Brushes.Black,LEFTMARGIN + 120,54F);
textToPrint =(从页继续+页+);
gfx.DrawString(textToPrint,printFontArial10,Brushes.Black,LEFTMARGIN + 400,54F);
}
}
如果(pageCounter == 0)
lineInc = 90;
,否则
lineInc = 78;
INT停止=计数器+ amtperpage;
如果(STOP> listView1.Items.Count)
停止= listView1.Items.Count;
,而(计数器<停止)
{
thisEndItem = listView1.Items [计数器] .SubItems [0]。文本;
partNum = listView1.Items [计数器] .SubItems [2]。文本;
partDesc = listView1.Items [计数器] .SubItems [3]。文本;
价格= listView1.Items [计数器] .SubItems [4]。文本;
partType = listView1.Items [计数器] .SubItems [5]。文本;
partQty = listView1.Items [计数器] .SubItems [6]。文本;
如果(thisEndItem == eiNum)// ---仍然工作在同一端项目
{
lineInc + = 12;
textToPrint = partNum;
gfx.DrawString(textToPrint,printFontArial10,Brushes.Black,LEFTMARGIN + 10,+ TOPMARGIN lineInc);
如果(partDesc.Length大于70)
partDesc = partDesc.Substring(0,70)+...;
textToPrint = partDesc;
gfx.DrawString(textToPrint,printFontArial10,Brushes.Black,LEFTMARGIN + 70,+ TOPMARGIN lineInc);
textToPrint =价格;
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);
}
,否则// ---开始一个新的最终产品
{
lineInc + = 16;
eiNum = listView1.Items [窗口]。文本;
eiDesc = listView1.Items [计数器] .SubItems [1]。文本;
如果(eiDesc.Length> 80)
eiDesc = eiDesc.Substring(0,80)+...;
textToPrint = eiNum + - + eiDesc;
gfx.DrawString(textToPrint,printFontArial10Bold,Brushes.Black,LEFTMARGIN,TOPMARGIN + lineInc);
}
计数器++;
}
// ---页脚-------------------------------
日期时间日期时间= DateTime.Now;
textToPrint =eView的+ EViewMethods.eviewVersion ++ Environment.UserName ++的String.Format({0:F},日期时间);
gfx.DrawString(textToPrint,printFontCour8,Brushes.Black,LEFTMARGIN,1060F);
printpagenum = pageCounter + 1;
textToPrint = printpagenum.ToString();
gfx.DrawString(textToPrint,printFontArial10Bold,Brushes.Black,LEFTMARGIN + 740,1060F);
// ----------------------------------------
如果(反== listView1.Items.Count)
{
morePages = FALSE;
}
,否则
{
pageCounter ++;
页面= document.AddPage();
GFX = XGraphics.FromPdfPage(页);
}
}
SaveFileDialog saveFileDialog1 =新SaveFileDialog();
saveFileDialog1.Filter =PDF文件(* .PDF)| * .PDF |所有文件| *。*(*。*)。
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.RestoreDirectory = TRUE;
如果(saveFileDialog1.ShowDialog()== DialogResult.OK)
{
document.Save(saveFileDialog1.FileName);
的Process.Start(saveFileDialog1.FileName);
}
}
您创建
document.AddPage一个新的页面();
,然后调用
XGraphics.FromPdfPage(页);
获得第二页GFX对象(可能这就是失踪的步骤)。
因此,重复上述步骤,从您的代码示例为每一个新页面:
/ /创建一个空白页
PdfPage页= document.AddPage();
//获取绘图
XGraphics GFX = XGraphics.FromPdfPage(页)的XGraphics对象;
更新:在你的循环,你做到以下几点:
document.AddPage();
XGraphics.FromPdfPage(页);
AddPage()返回一个处理到新创建的页面 - 你扔进了垃圾箱。
然后调用XGraphics.FromPdfPage()创建另一个GFX第一页 - 这你也扔在垃圾桶,但你会得到一个异常,因为已经有第一页一个GFX
一个小的变化应该做的伎俩:
页=文档。 AddPage();
GFX = XGraphics.FromPdfPage(页);
另请参阅:
的
我做梦也没想到添加第二个页面会如此艰难!与建议的代码没有运气。结果
PDFsharp包括相当多的工作样本,让人们去。没有运气,因为你忽略的重要组成部分,建议代码 - 由方法返回的值
I can't find documentation in PDFsharp to show how to add a 2nd page using C#!
As an example, over in VB6 I use a PDF creation method called mjwPDF. To indicate that the page is finished
objPDF.PDFEndPage
And to start a new page:
objPDF.PDFNewPage
My PDFsharp initial settings:
// 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);
Unfortunately in PDFsharp I can't find out how to start/write on a new page. I see these commands but can't get a second page started.
document.AddPage();
document.InsertPage();
I've tried both of these but my output continues to write on page 1, not page 2.
Any ideas would be greatly appreciated.
Here's the actual 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);
}
}
Here's my corrected 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);
}
}
You create a new page with
document.AddPage();
and then call
XGraphics.FromPdfPage(page);
to get a gfx object for the second page (probably this is the missing step).
So repeat those steps from your code sample for every new page:
// Create an empty page
PdfPage page = document.AddPage();
// Get an XGraphics object for drawing
XGraphics gfx = XGraphics.FromPdfPage(page);
Update: In your loop you do the following:
document.AddPage();
XGraphics.FromPdfPage(page);
AddPage() returns a "handle" to the newly created page - which you throw in the bin.Then you call "XGraphics.FromPdfPage()" to create yet another gfx for the first page - which you also would throw in the bin, but you get an exception since there already is a gfx for the first page.
A small change should do the trick:
page = document.AddPage();
gfx = XGraphics.FromPdfPage(page);
See also:http://www.pdfsharp.net/wiki/PageSizes-sample.ashx
"I never dreamed adding a second page could be so difficult! No luck with the suggested code."
PDFsharp includes quite a few working samples to get people going. No luck with the suggested code since you ignored the important part - the values returned by the methods.
这篇关于PDFsharp - 如何创建第2页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!