问题描述
我正在使用 SkiaSharp 创建包含用于打印的图像的 XPS(和/或 PDF)文档。 PDF 中的图像被正确拉伸以适合所需的矩形,但在 XPS 上它们似乎被剪裁了。我的代码和示例图片如下。
这是一个错误还是我做错了什么?我原以为 XPS 的 PDF 代码应该是相同的,但也许我需要做一些额外的技巧或技巧?
代码:
public void Todocument(string inputPath,bool pdf = false)
{
SKDocument document = null;
var outputPath = Path.Combine(Path.GetDirectoryName(inputPath),Path.GetFileNameWithoutExtension(inputPath)) + (pdf ? ".pdf" : ".xps");
using var input = File.OpenRead(inputPath);
using var inputStream = new SKManagedStream(input);
using var original = SKBitmap.Decode(inputStream);
// page a little bigger than source image
var pageRect = new SKRect(0,original.Width + 20,original.Height + 100);
var renderRect = new SKRect(0,(float)original.Width,(float)original.Height);
using var outputStream = File.Create(outputPath);
using var managedStream = new SKManagedWStream(outputStream);
// null checking removed for readability
using var canvas = document.BeginPage(pageRect.Width,pageRect.Height);
canvas.Clear();
using var p = new SKPaint();
SKRect picRect;
float xFactor = 0.25F;
float yFactor = 0.25F;
if (pdf)
{
// stretch renderRect for pdf
picRect = new SKRect(renderRect.Left,renderRect.Top,renderRect.Left + renderRect.Width * xFactor,renderRect.Top + renderRect.Height * yFactor);
}
else
{
// stretch renderRect for xps
// xFactor = 1.25F;
// yFactor = 1.25F;
picRect = new SKRect(renderRect.Left,renderRect.Top + renderRect.Height * yFactor);
}
canvas.DrawBitmap(original,original.Info.Rect,picRect,p);
p.strokeWidth = 2;
p.Color = SKColors.Red;
p.Style = SKPaintStyle.stroke;
// rect same size as original bitmap
canvas.DrawRect(renderRect,p);
p.Color = SKColors.Blue;
// rect same size as stretched bitmap
canvas.DrawRect(picRect,p);
using var tp = new SKPaint();
tp.TextSize = 10.0f;
tp.IsAntialias = true;
tp.Isstroke = false;
//canvas.DrawText($"Page: {pageRect.Height}w {pageRect.Width}h",10F,pageRect.Bottom - 55F,tp);
tp.Color = SKColors.Red;
canvas.DrawText($"Source: {original.Width}w {original.Height}h",pageRect.Bottom - 40F,tp);
tp.Color = SKColors.Blue;
canvas.DrawText($"Dest: {picRect.Width}w {picRect.Height}h",pageRect.Bottom - 25F,tp);
canvas.DrawText($"stretched: {xFactor}w {yFactor}h",pageRect.Bottom - 10F,tp);
// bitmap should fit to the background rect but fails with xps
//canvas.DrawBitmap(original,renderRect,p);
document.Close();
}
原始图片:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)