Pdfnet打印样本不工作
在从PDFPrintTest样本中进行测试时,我们注意到示例2与事件处理程序的示例1相结合的行为不正确。Pdfnet打印样本不工作
例PrintPage事件处理程序的1:
void PrintPage(object sender, PrintPageEventArgs ev)
{
Graphics gr = ev.Graphics;
gr.PageUnit = GraphicsUnit.Inch;
Rectangle rectPage = ev.PageBounds; //print without margins
//Rectangle rectPage = ev.MarginBounds; //print using margins
float dpi = gr.DpiX;
if (dpi > 300) dpi = 300;
int example = 1;
bool use_hard_margins = false;
// Example 1) Print the Bitmap.
if (example == 1)
{
pdfdraw.SetDPI(dpi);
Bitmap bmp = pdfdraw.GetBitmap(pageitr.Current());
//bmp.Save("tiger.jpg");
gr.DrawImage(bmp, rectPage, 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel);
}
全样本代码在这里:https://www.pdftron.com/pdfnet/samplecode/PDFPrintTest.cs.html
你会注意到在评论中bmp.Save("tiger.jpg");
,这就是它出错的地步。如果我们运行代码并保存bmp,我们就可以得到我们需要的jpg文件。然而,gr.DrawImage(bmp, rectPage, 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel);
打印一个普通的空白PDF页面。这是为什么 ?
我们的目标:在某些情况下,我们需要强制使用40%灰度的打印作业。 Winforms不支持这一点,我们只能设置灰度,没有指定百分比,所以我们希望截取打印并将输出更改为40%的灰度,这导致我们转到了PdfNet Print样本。从这些示例中,处理程序中只有示例2具有Graphics gr
,它接受用于设置所需页面中灰度级的颜色矩阵。
任何非PdfNet解决方案都是受欢迎的,但样例代码不能正常工作仍然很奇怪。
我们得到它的工作,显然它只是在打印到PDF时才给出一个白页。完全相同的代码呈现太小的图像,但实际上打印。 我们仍然不完全确定问题所在,但是制定了可以正确打印到pdf的新代码,并将全尺寸打印到打印机。
void PrintPage(object sender, PrintPageEventArgs ev)
{
Graphics gr = ev.Graphics;
gr.PageUnit = GraphicsUnit.Pixel; //this has been changed to Pixel, from Inch.
float dpi = gr.DpiX;
//if (dpi > 300) dpi = 300;
Rectangle rectPage = ev.PageBounds; //print without margins
//Rectangle rectPage = ev.MarginBounds; //print using margins
float dpi = gr.DpiX;
int example = 1;
bool use_hard_margins = false;
// Example 1) Print the Bitmap.
if (example == 1)
{
pdfdraw.SetDPI(dpi);
pdfdraw.SetDrawAnnotations(false);
Bitmap bmp = pdfdraw.GetBitmap(pageitr.Current());
gr.DrawImage(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel);
}
`
if (dpi > 300) dpi = 300;
这是在渲染过小图像的罪魁祸首被发送到打印机。它还解决了“白色pdf”问题。 其次,我们没有将rectPage
传递给DrawImage,并将其替换为:new Rectangle(0, 0, bmp.Width, bmp.Height)
。
我可以理解发送到打印机的较小尺寸,但为什么它没有选择打印到PDF的任何内容仍不清楚。
尽管最终目标仍然是打印,但使用正确的“打印到pdf”进行调试和测试要容易得多。上面的代码在2个独立的项目中起作用,所以我会假设这确实解决了这个问题。
谢谢你指出这一点。就像你一样,我不清楚为什么bmp.Save
工作正常,但Graphics.DrawImage(bmp,...
只显示背景颜色。我怀疑它与其他参数传递到Graphics.DrawImage
由于该位图对象是正确的,那么这个特定的问题是一个真正的.Net问题,而不是一个PDFNet问题,我目前无法回答。
样本的其他部分运行正常,使用PDFDraw.DrawInRect
。这不适合你吗?
我们现在成功打印页面,奇怪的是,它并没有'打印到pdf'。尽管如此,为了测试目的而实际打印却有点麻烦。 我们现在有我们需要的东西,但它为什么只显示'print to pdf'中的白页仍然是一个谜。事实上,这可能是一个.NET问题。 –
瑞恩,我添加了一个代码片段,为我们工作,作为答案。希望你能从中得到一些东西,以防你想改变你的示例代码。 –
如果您有新的或单独的问题,请发布新的SO问题。 – Ryan
太好了,谢谢。我们将审查和更新我们的示例代码。 – Ryan