问题描述
|
是否可以使用
iTextSharp
在PDF文档中的页面上添加边框?我正在从头开始生成PDF文件,因此不需要在现有文档中添加边框。
这是我的代码,例如:
Document pdfDocument = new Document(PageSize.LETTER);
Font headerFont = new Font(baseFont,13);
Font font = new Font(baseFont,10);
PdfWriter writer = PdfWriter.GetInstance(pdfDocument,new FileStream(fileName,FileMode.Create));
pdfDocument.open();
//I add IElements here.
pdfDocument.Close();
解决方法
这是C#中的答案(改编自Mark Storer)。本示例使用页面的边缘绘制边框,有时我发现这对于调试页面布局很有用。
public override void OnEndPage(PdfWriter writer,Document document)
{
base.OnEndPage(writer,document);
var content = writer.DirectContent;
var pageBorderRect = new Rectangle(document.PageSize);
pageBorderRect.Left += document.LeftMargin;
pageBorderRect.Right -= document.RightMargin;
pageBorderRect.Top -= document.TopMargin;
pageBorderRect.Bottom += document.BottomMargin;
content.SetColorStroke(BaseColor.RED);
content.Rectangle(pageBorderRect.Left,pageBorderRect.Bottom,pageBorderRect.Width,pageBorderRect.Height);
content.Stroke();
}
, 建议您在生成当前页面时获得其直接内容,并以PdfContentByte
作为边框。
您可能需要派生于PdfPageEventHelper
的类,该类在onEndPage事件中进行绘制。
您可以通过document
参数的getPageSize()
查询当前页面大小,并使用它(稍作调整)绘制边框。假设您正在使用iTextSharp,则可能有一个PageSize
属性,而不是\“ get \”方法。
就像是:
public void onEndPage(PdfWriter writer,Document doc) {
PdfContentByte content = writer.getDirectContent();
Rectangle pageRect = doc.getPageSize();
pageRect.setLeft( pageRect.getLeft() + 10 );
pageRect.setRight( pageRect.getRight() - 10 );
pageRect.setTop( pageRect.getTop() - 10 );
pageRect.setBottom( pageRect.getBottom() + 10 );
content.setColorStroke( Color.red );
content.rectangle(pageRect.getLeft(),pageRect.getBottom(),pageRect.getWidth(),pageRect.getHeight());
content.stroke();
}
请注意,您实际上可以将ѭ9传递到content.rectangle()
,此时将使用矩形的边框和填充设置。我认为这可能有点令人困惑,所以没有这样编码。
, 我能够为现有PDF添加红色边框
public void createPdf(PdfReader pdfReader)
throws DocumentException,IOException {
String userDir = System.getProperty(\"user.dir\");
System.out.println(\"userDir = \" + userDir);
RESULT = userDir + \"/work/\"+\"sample.pdf\";
// step 1
Document document = new Document();
// step 2
PdfCopy copy = new PdfCopy(document,new FileOutputStream(RESULT));
// step 3
document.open();
int noOfPages = pdfReader.getNumberOfPages();
for (int page = 0; page < noOfPages; ) {
if(page==0) {
PdfImportedPage immportedPage = copy.getImportedPage(pdfReader,++page);
PageStamp stamp = copy.createPageStamp(immportedPage);
PdfContentByte canvas = stamp.getOverContent();
drawPageBorder(canvas,PageSize.A4.getWidth(),PageSize.A4.getHeight());
stamp.alterContents();
copy.addPage(immportedPage);
} else {
copy.addPage(copy.getImportedPage(pdfReader,++page));
}
}
copy.freeReader(pdfReader);
pdfReader.close();
// step 4
document.close();
}
public void drawPageBorder(PdfContentByte content,float width,float height) {
content.saveState();
PdfGState state = new PdfGState();
state.setFillOpacity(0.0f);
content.setGState(state);
content.setColorStroke(BaseColor.RED);
content.setLineWidth(6);
content.rectangle(5,5,width,height);
content.fillStroke();
content.restoreState();
}