我遇到了通过批处理作业生成报告pdf文件的问题。它工作正常,除非使用批处理作业执行(有时它可以工作,但大部分时间我已经损坏了pdf文件):
while(qr.next()) //loop on my quotationId with some filters
{
salesQuotation = qr.get(tablenum(salesQuotationTable));
filenamePDF = strfmt("%1%2",SalesQuotation.QuotationId,".pdf");
permissionSetPDF = new Set(Types::Class);
permissionSetPDF.add(new FileIOPermission(filenamePDF,'w'));
permissionSetPDF.add(new InteropPermission(InteropKind::ClrInterop));
CodeAccessPermission::assertMultiple(permissionSetPDF);
report = new ReportRun(new Args(ReportStr(DevisContactBusinessV2)));
report.query().interactive(false);
report.report().interactive(false);
report.args().caller(null);
report.args().parm(SalesQuotation.QuotationId);
report.printJobSettings().setTarget(PrintMedium::File);
report.printJobSettings().format(PrintFormat::PDF);
report.printJobSettings().warnIfFileExists(false);
report.printJobSettings().fileName(strfmt("%1%2",path,filenamePDF));
report.run();
//tried to get around the file size problem by execute pdf file generation outside the loop
fi = new System.IO.FileInfo(strfmt('%1%2',path,filenamePDF));
length = fi.get_Length();
if(length <= 1000)
{
info(strfmt("%1 %2","Quotation problem",SalesQuotation.QuotationId));
this.OBRfixPDF(salesQuotation.QuotationId);
}
else
{
info(strfmt("%1 %2","Quotation OK:",SalesQuotation.QuotationId));
}
CodeAccessPermission::revertAssert();
}
生成的文件似乎已损坏,它们的大小为1 ko且无法读取。报告中没有图像,我使用的是没有SP1的AX 2009。
答案 0 :(得分:1)
我遇到了同样的问题并且信不信由它与字体和字体缓存有关。我不得不做一些改变,但你需要做的第一件事就是:
report.printJobSettings.format(PrintFormat::PDF_Embed_Fonts);
然后在Class“ClassFactory”createViewer方法中添加名为“noFontCache”的布尔变量,在“ReportOutputUserType :: PDFEmbedFonts”的情况下,将代码更改为以下内容:
noFontCache = true;
return new PDFViewer(jobsCursor,pagesCursor,true,noFontCache);
然后在新的mehtod下的类PDFViewer中,将方法签名更改为:
public void new(PrintJobHeader _jobCursor, PrintJobPages _pagesCursor, boolean _embedFonts = false, boolean _noFontCache = false)
然后,在方法结束的超级调用之前添加以下代码:
if(_noFontCache)
{
pdfFontCache = new SysPdfFontCache();
}
else
{
pdfFontCache = infolog.getPdfFontCache();
}
这允许AX生成新的字体缓存,而不是使用现有的字体缓存(由用户在其客户端计算机上生成,现在该服务器与运行批处理作业的服务器不同)。
答案 1 :(得分:0)
这是AX 2009的一个已知问题(我相信前7或8)。由于安全问题,如果它们包含图像,则存在阻止从服务器生成PDF的限制。
我没有更多相关信息,但有一个修补程序,您可以通过CustomerSource找到它。您还可以在以下位置找到指向它的链接: http://blogs.msdn.com/b/emeadaxsupport/archive/2011/09/19/you-cannot-print-images-on-batch-reports-now-you-can.aspx
答案 2 :(得分:0)
如果您使用Web服务或Web应用程序中的Business Connector组件,则会出现此问题。 这是修复: http://support.microsoft.com/kb/937345