为什么pdf下载的bij Trinidad fileDownloadActionListener无法用pdf打开reader?
Why pdf downloaded bij Trinidad fileDownloadActionListener can't be open with pdf reader?
我确实从 String
创建了 PDF
,这个 String
在 xml format
中,并以 trinidad
按钮的形式呈现给用户 fileDownloadActionListener
.
我可以下载PDF但是不能先用PDF reader
比如adobe reader打开它
我认为它可能已损坏,但事实并非如此,因为我可以使用 Visual Studio Code
或任何其他文本编辑器打开它,例如 notepad
.
1- 为什么我不能用 adobe 打开它 reader?
2- 为什么要这样做有更好的办法吗?
前端:
<h:commandButton id="mehrpdf" value="Download PDF" styleClass="popupButton">
<tr:fileDownloadActionListener filename="mehr.pdf" contentType="application/pdf; charset=utf-8" method="#{bean.downloadMehr}" />
</h:commandButton>
后端:
public void downloadMehr(FacesContext context, OutputStream out) throws IOException
{
String fetchedXmlMessage = getFetchedXmlMessage();
XmlPrettifier prettifier = XmlPrettifierFactory.getInstance();
prettyXmlMessage = prettifier.makePretty(fetchedXmlMessage);
// alternativ way
File pdfFile = createPdfFromTxt(prettyXmlMessage);
OutputStreamWriter w = new OutputStreamWriter(out, "UTF-8");
w.write(prettyXmlMessage);
w.flush();
}
pdf创建:
public File createPdfFromTxt(String content) throws IOException, DocumentException {
//define the size of the PDF file, version and output file
File outfile = File.createTempFile("mehr", ".pdf");
Document pdfDoc = new Document(PageSize.A4);
PdfWriter.getInstance(pdfDoc, new FileOutputStream(outfile)).setPdfVersion(PdfWriter.PDF_VERSION_1_7);
pdfDoc.open();
//define the font and also the command that is used to generate new paragraph
Font myfont = new Font();
myfont.setStyle(Font.NORMAL);
myfont.setSize(11);
pdfDoc.add(new Paragraph("\n"));
// add paragraphs into newly created PDF file
File contentFile = File.createTempFile("content", ".txt");
FileUtils.writeStringToFile(contentFile, content);
BufferedReader br = new BufferedReader(new FileReader(contentFile));
String strLine;
while ((strLine = br.readLine()) != null) {
Paragraph para = new Paragraph(strLine + "\n", myfont);
para.setAlignment(Element.ALIGN_JUSTIFIED);
pdfDoc.add(para);
}
pdfDoc.close();
br.close();
return outfile;
}
我确实根据上面命令中提到的人更改了后端,现在我可以用PDF阅读它reader。谢谢大家。
public void downloadMehr(FacesContext context, OutputStream out) throws IOException
{
String fetchedXmlMessage = getFetchedXmlMessage();
XmlPrettifier prettifier = XmlPrettifierFactory.getInstance();
prettyXmlMessage = prettifier.makePretty(fetchedXmlMessage);
// create pdf from string
PdfCreator pdfCreator = new PdfCreator( prettyXmlMessage);
File pdfFile = pdfCreator.create();
FileInputStream inStream = new FileInputStream(pdfFile);
byte[] buffer = new byte[4096];
int bytesRead = -1;
while ((bytesRead = inStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
inStream.close();
outputStream.close();
}
我确实从 String
创建了 PDF
,这个 String
在 xml format
中,并以 trinidad
按钮的形式呈现给用户 fileDownloadActionListener
.
我可以下载PDF但是不能先用PDF reader
比如adobe reader打开它
我认为它可能已损坏,但事实并非如此,因为我可以使用 Visual Studio Code
或任何其他文本编辑器打开它,例如 notepad
.
1- 为什么我不能用 adobe 打开它 reader?
2- 为什么要这样做有更好的办法吗?
前端:
<h:commandButton id="mehrpdf" value="Download PDF" styleClass="popupButton">
<tr:fileDownloadActionListener filename="mehr.pdf" contentType="application/pdf; charset=utf-8" method="#{bean.downloadMehr}" />
</h:commandButton>
后端:
public void downloadMehr(FacesContext context, OutputStream out) throws IOException
{
String fetchedXmlMessage = getFetchedXmlMessage();
XmlPrettifier prettifier = XmlPrettifierFactory.getInstance();
prettyXmlMessage = prettifier.makePretty(fetchedXmlMessage);
// alternativ way
File pdfFile = createPdfFromTxt(prettyXmlMessage);
OutputStreamWriter w = new OutputStreamWriter(out, "UTF-8");
w.write(prettyXmlMessage);
w.flush();
}
pdf创建:
public File createPdfFromTxt(String content) throws IOException, DocumentException {
//define the size of the PDF file, version and output file
File outfile = File.createTempFile("mehr", ".pdf");
Document pdfDoc = new Document(PageSize.A4);
PdfWriter.getInstance(pdfDoc, new FileOutputStream(outfile)).setPdfVersion(PdfWriter.PDF_VERSION_1_7);
pdfDoc.open();
//define the font and also the command that is used to generate new paragraph
Font myfont = new Font();
myfont.setStyle(Font.NORMAL);
myfont.setSize(11);
pdfDoc.add(new Paragraph("\n"));
// add paragraphs into newly created PDF file
File contentFile = File.createTempFile("content", ".txt");
FileUtils.writeStringToFile(contentFile, content);
BufferedReader br = new BufferedReader(new FileReader(contentFile));
String strLine;
while ((strLine = br.readLine()) != null) {
Paragraph para = new Paragraph(strLine + "\n", myfont);
para.setAlignment(Element.ALIGN_JUSTIFIED);
pdfDoc.add(para);
}
pdfDoc.close();
br.close();
return outfile;
}
我确实根据上面命令中提到的人更改了后端,现在我可以用PDF阅读它reader。谢谢大家。
public void downloadMehr(FacesContext context, OutputStream out) throws IOException
{
String fetchedXmlMessage = getFetchedXmlMessage();
XmlPrettifier prettifier = XmlPrettifierFactory.getInstance();
prettyXmlMessage = prettifier.makePretty(fetchedXmlMessage);
// create pdf from string
PdfCreator pdfCreator = new PdfCreator( prettyXmlMessage);
File pdfFile = pdfCreator.create();
FileInputStream inStream = new FileInputStream(pdfFile);
byte[] buffer = new byte[4096];
int bytesRead = -1;
while ((bytesRead = inStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
inStream.close();
outputStream.close();
}