Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在pdf文件JAVA中插入csv文件作为附件_Java_Csv_Pdf - Fatal编程技术网

在pdf文件JAVA中插入csv文件作为附件

在pdf文件JAVA中插入csv文件作为附件,java,csv,pdf,Java,Csv,Pdf,我需要生成PDF,其中包含一个CSV文件作为附件,可以打开(双击它)。有没有办法用JAVA编写这个程序?谢谢。因为您没有显示任何代码,所以很难知道您使用的是新的iText 7还是旧的(不再受支持的)iText 5 还不清楚您是希望附加为文档级附件(仅在PDF的“附件”面板中可见),还是希望附加为注释的文件(在页面上也可见) 让我们假设您是iText的新手,并且从最新版本开始。在这种情况下,您可以添加文档级附件,如下所示: PdfDocument pdfDoc = new PdfDocument(

我需要生成PDF,其中包含一个CSV文件作为附件,可以打开(双击它)。有没有办法用JAVA编写这个程序?谢谢。

因为您没有显示任何代码,所以很难知道您使用的是新的iText 7还是旧的(不再受支持的)iText 5

还不清楚您是希望附加为文档级附件(仅在PDF的“附件”面板中可见),还是希望附加为注释的文件(在页面上也可见)

让我们假设您是iText的新手,并且从最新版本开始。在这种情况下,您可以添加文档级附件,如下所示:

PdfDocument pdfDoc = new PdfDocument(new PdfWriter(DEST));
PdfFileSpec fs = PdfFileSpec.createEmbeddedFileSpec(pdfDoc,
    PATH, null, "test.csv", null, null, false);
pdfDoc.addFileAttachment("specificname", fs);
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(DEST));
Rectangle rect = new Rectangle(36, 700, 100, 100);
PdfFileSpec fs = PdfFileSpec.createEmbeddedFileSpec(pdfDoc,
    PATH, null, "test.csv", null, null, false);
PdfAnnotation attachment = new PdfFileAttachmentAnnotation(rect, fs)
            .setContents("Click me");
pdfDoc.addNewPage().addAnnotation(attachment);
PdfFileSpecification fs = PdfFileSpecification.FileEmbedded(
    writer, null, fileName, csv_stream;
fs.AddDescription("specificname", false);
writer.AddFileAttachment(fs);
PdfFileSpecification fs = PdfFileSpecification.FileEmbedded(
    writer, null, fileName, csv_stream);
fs.AddDescription("specificname", false);
stamper.AddFileAttachment(fs);
在本例中,
PATH
是CSV文件的文件路径

用于添加文件附件批注的iText 7代码如下所示:

PdfDocument pdfDoc = new PdfDocument(new PdfWriter(DEST));
PdfFileSpec fs = PdfFileSpec.createEmbeddedFileSpec(pdfDoc,
    PATH, null, "test.csv", null, null, false);
pdfDoc.addFileAttachment("specificname", fs);
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(DEST));
Rectangle rect = new Rectangle(36, 700, 100, 100);
PdfFileSpec fs = PdfFileSpec.createEmbeddedFileSpec(pdfDoc,
    PATH, null, "test.csv", null, null, false);
PdfAnnotation attachment = new PdfFileAttachmentAnnotation(rect, fs)
            .setContents("Click me");
pdfDoc.addNewPage().addAnnotation(attachment);
PdfFileSpecification fs = PdfFileSpecification.FileEmbedded(
    writer, null, fileName, csv_stream;
fs.AddDescription("specificname", false);
writer.AddFileAttachment(fs);
PdfFileSpecification fs = PdfFileSpecification.FileEmbedded(
    writer, null, fileName, csv_stream);
fs.AddDescription("specificname", false);
stamper.AddFileAttachment(fs);
矩形
rect
定义注释的位置和尺寸。如果要将文件附件批注添加到现有文档,可以创建一个
PdfDocument
,该文档还将
PdfReader
实例作为参数

如果出于某种原因,您仍然希望使用旧的iText,则可以添加文档级附件,如下所示:

PdfDocument pdfDoc = new PdfDocument(new PdfWriter(DEST));
PdfFileSpec fs = PdfFileSpec.createEmbeddedFileSpec(pdfDoc,
    PATH, null, "test.csv", null, null, false);
pdfDoc.addFileAttachment("specificname", fs);
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(DEST));
Rectangle rect = new Rectangle(36, 700, 100, 100);
PdfFileSpec fs = PdfFileSpec.createEmbeddedFileSpec(pdfDoc,
    PATH, null, "test.csv", null, null, false);
PdfAnnotation attachment = new PdfFileAttachmentAnnotation(rect, fs)
            .setContents("Click me");
pdfDoc.addNewPage().addAnnotation(attachment);
PdfFileSpecification fs = PdfFileSpecification.FileEmbedded(
    writer, null, fileName, csv_stream;
fs.AddDescription("specificname", false);
writer.AddFileAttachment(fs);
PdfFileSpecification fs = PdfFileSpecification.FileEmbedded(
    writer, null, fileName, csv_stream);
fs.AddDescription("specificname", false);
stamper.AddFileAttachment(fs);
或者像这样:

PdfDocument pdfDoc = new PdfDocument(new PdfWriter(DEST));
PdfFileSpec fs = PdfFileSpec.createEmbeddedFileSpec(pdfDoc,
    PATH, null, "test.csv", null, null, false);
pdfDoc.addFileAttachment("specificname", fs);
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(DEST));
Rectangle rect = new Rectangle(36, 700, 100, 100);
PdfFileSpec fs = PdfFileSpec.createEmbeddedFileSpec(pdfDoc,
    PATH, null, "test.csv", null, null, false);
PdfAnnotation attachment = new PdfFileAttachmentAnnotation(rect, fs)
            .setContents("Click me");
pdfDoc.addNewPage().addAnnotation(attachment);
PdfFileSpecification fs = PdfFileSpecification.FileEmbedded(
    writer, null, fileName, csv_stream;
fs.AddDescription("specificname", false);
writer.AddFileAttachment(fs);
PdfFileSpecification fs = PdfFileSpecification.FileEmbedded(
    writer, null, fileName, csv_stream);
fs.AddDescription("specificname", false);
stamper.AddFileAttachment(fs);
前一个代码片段用于当您有一个
PdfWriter
实例时,因为您是从头开始创建文档的;后一个代码段用于在现有文档中添加附件时使用
PdfStamper
实例

对于文件附件批注,您需要以下代码:

PdfFileSpecification fs = PdfFileSpecification.fileEmbedded(
    writer, null, fileName, csv_stream);
PdfAnnotation attachment =
    PdfAnnotation.createFileAttachment(writer, rect, fileName, fs);
writer.addAnnotation(attachment);
或者,如果您没有
编写器
,但有
压模

stamper.addAnnotation(attachment, p);
其中
p
是页码


显然,建议使用iText 7,因为它比iText 5更能证明未来。

您的问题不完整,这使答案变得复杂(请参阅我的答案:我不能给出一个答案;我必须给出几个答案)。今后,请说明您正在使用的库以及该库的版本。请注意,不允许要求人们在堆栈溢出时推荐库。还要更具体地说明您想要的附件类型:您想要文档级附件还是文件附件批注?非常感谢Bruno。我还没有使用任何版本,我是在询问实现这一点所需的技术。我正在按照你的建议使用iText。再次感谢。