正如在标题中所提到的,如何用" RED"使用iText库生成的所有pdf页面的颜色,宽度笔划5。我尝试了一些代码但没有结果。
(1)
PdfPTable table = new PdfPTable(1);
table.setWidthPercentage(99);
table.setLockedWidth(true);
PdfPCell cell = new PdfPCell();
cell.setFixedHeight(PageSize.A4.getHeight());
document.add(table);
(2)
PdfContentByte content = PdfWriter.getInstance(document, fout).getDirectContent();
Rectangle pageRect = document.getPageSize();
pageRect.setLeft(pageRect.getLeft() + 10);
pageRect.setRight(pageRect.getRight() - 10);
pageRect.setTop(pageRect.getTop() - 10);
pageRect.setBottom(pageRect.getBottom() +10);
content.setColorStroke( BaseColor.BLUE);
content.rectangle(pageRect.getLeft(), pageRect.getBottom(), pageRect.getWidth(), pageRect.getHeight());
content.setLineWidth(10);
content.stroke();
content.fillStroke();
那些方法没有给我任何结果,谢谢!
由于Bruno Lowagie的回应,我也改变了我的方法。这个例子就像一个魅力,但我不能适应我的代码。
这是我的代码:按下按钮,PDF文件将在指定地址生成。我稍后会添加更多内容,但现在让我们坚持生成pdf文件。
SaveToSD = (Button)findViewById(R.id.SaveToMemoryCard_xml);
SaveToSD.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View sssdd)
{
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/ConcreteProject";
File dir = new File(path);
if (!dir.exists())
dir.mkdirs();
Log.d("PDFCreator", "PDF Path: " + path);
// Incremental Process of Creating File(s).
String pdfName = "SDG_Created_pdf.pdf";
int num = 0;
File file = new File(dir, pdfName);
while (file.exists()) {
num++;
pdfName = "SDG_Created_pdf" + num + ".pdf";
file = new File(dir, pdfName);
}
try {
new ConAccept_Result().createPdf(pdfName);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}//End Of onClick(View sssdd).
});
这是方法/类定义:
public class RedBorder extends PdfPageEventHelper {
@Override
public void onEndPage(PdfWriter writer, Document document) {
PdfContentByte canvas = writer.getDirectContent();
Rectangle rect = document.getPageSize();
rect.setBorder(Rectangle.BOX); // left, right, top, bottom border
rect.setBorderWidth(5); // a width of 5 user units
rect.setBorderColor(BaseColor.RED); // a red border
rect.setUseVariableBorders(true); // the full width will be visible
canvas.rectangle(rect);
}
}
public void createPdf(String stringfile) throws IOException, DocumentException {
// step 1
com.itextpdf.text.Document document = new com.itextpdf.text.Document();
// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(stringfile));
RedBorder event = new RedBorder();
writer.setPageEvent(event);
// step 3
document.open();
// step 4
Chunk chunk = new Chunk("Lovin' iText - Lovin' iText");
chunk.setTextRenderMode(PdfContentByte.TEXT_RENDER_MODE_FILL_STROKE, 0.3f, BaseColor.CYAN);
document.add(chunk);
// step 5
document.close();
}
在运行da app文件夹后,我命名为created,但没有PDF文件!
非常感谢..
答案 0 :(得分:3)
阅读你的问题,很明显你需要一个页面事件。您的尝试只会添加一次边框,而您可能希望为每个页面添加边框。
请查看PageBorder示例。在此示例中,您将找到名为PageEvents
的{{1}}接口的实现:
RedBorder
每次页面结束时都会自动触发public class RedBorder extends PdfPageEventHelper {
@Override
public void onEndPage(PdfWriter writer, Document document) {
PdfContentByte canvas = writer.getDirectContent();
Rectangle rect = document.getPageSize();
rect.setBorder(Rectangle.BOX); // left, right, top, bottom border
rect.setBorderWidth(5); // a width of 5 user units
rect.setBorderColor(BaseColor.RED); // a red border
rect.setUseVariableBorders(true); // the full width will be visible
canvas.rectangle(rect);
}
}
方法(不使用onEndPage()
方法添加内容)。
在此方法的实现中,我们询问onStartPage()
对象的当前页面大小。请注意,传递给事件的document
实例的类型为document
。 与PdfDocument
方法中使用的文档相同
我们根据需要调整矩形。我们将边框设置为createPdf()
,这意味着我们要在左侧,右侧,顶部和底部添加边框。我们定义边框的宽度(在本例中为5个用户单位),我们定义颜色。
如果你停在那里,将绘制一个边框为5个用户单位的矩形,但你只会看到2.5个用户单位的行,因为5个用户单位的另一半将在可见区域之外 页面。
您可以使用10个用户单位的宽度,或将变量边框标记设置为BOX
来避免这种情况。
现在我们要做的就是将true
对象传递给rect
方法。此方法与您使用的同名方法不同,因为它也会触摸矩形。
答案 1 :(得分:0)
在SaveToSD的onClick部分,有一些变化。改变这些:
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/ConcreteProject";
File dir = new File(path);
if (!dir.exists())
dir.mkdirs();
Log.d("PDFCreator", "PDF Path: " + path);
// Incremental Process of Creating File(s).
String pdfName = "SDG_Created_pdf.pdf";
int num = 0;
File file = new File(dir, pdfName);
while (file.exists()) {
num++;
pdfName = "SDG_Created_pdf" + num + ".pdf";
file = new File(dir, pdfName);
}
try {
new ConAccept_Result().createPdf(pdfName);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
有了这个:
String path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/ConcreteProject";
File dir = new File(path);
if(!dir.exists())
dir.mkdirs();
//Incremental
String NameWithCounter = "/ConcreteProject/myPDFfile_1.pdf";
String DEST = Environment.getExternalStorageDirectory().getAbsolutePath()+NameWithCounter;
//int FileCounter = 1;
File real_file = new File(DEST);
while(real_file.exists()){
FileCounter++;
NameWithCounter = "/ConcreteProject/myPDFfile_"+FileCounter+".pdf";
DEST = Environment.getExternalStorageDirectory().getAbsolutePath()+NameWithCounter;
real_file = new File(DEST);
}
try {
createPdf(DEST);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
因此,当用户按Save to Memory时,将生成PDF文件。例如,如果用户按下4次,将有4个不同的PDF文件,其中包含增量文件名。
答案 2 :(得分:0)
我这样做了..
PdfCopy copy = new PdfCopy(document, bout);
document.open();
......
//read the PDF however you want to PDFReader testPdf
for (int page = 0; page < noOfPages; ) {
PdfImportedPage importedPage = copy.getImportedPage(testPdf, ++page);
PageStamp pageStamp = copy.createPageStamp(importedPage);
addHilitePageBlock(pageStamp);
copy.addPage(importedPage);
}
copy.freeReader(testPdf);
testPdf.close();
......
public void addPageBlock(PageStamp stamp) throws IOException {
PdfContentByte canvas = stamp.getOverContent();
drawRectangle(canvas, PageSize.A5.getWidth(), PageSize.A5.getHeight());
stamp.alterContents();
}
public void drawRectangle(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(17, 17, width + 155, height+ 145);
content.fillStroke();
content.restoreState();
}