我想将 InkCanvas 控件的输出另存为 PDF 文件我可以将其另存为 .isf 和 .bmp 我想将其另存为 .pdf 如何?
问问题
928 次
2 回答
2
//首先创建 Ink Canvas 的多个实例并添加到 List** 中,然后以 PDF 格式保存一个画布有一个图像。
[DebuggerDisplay("[{Scene}]Strokes:{Strokes.Count}, Children:{Children.Count}")]
public class InkCanvas_SandeepJadhav : InkCanvas
{
}
public List<InkCanvas_SandeepJadhav> listCanvas = new List<InkCanvas_SandeepJadhav>();
public void saveMultiInkCanvasToPdf()
{
string subpath = Directory.GetCurrentDirectory();
SaveFileDialog saveFileDialog12 = new SaveFileDialog();
saveFileDialog12.Filter = "Pdf File|*.pdf";
saveFileDialog12.Title = "Save Pdf File";
saveFileDialog12.InitialDirectory = subpath;
saveFileDialog12.ShowDialog();
// If the file name is not an empty string open it for saving.
if (saveFileDialog12.FileName == "") return;
subpath = saveFileDialog12.FileName.Substring(0, saveFileDialog12.FileName.Length - saveFileDialog12.SafeFileName.Length);
string extension = saveFileDialog12.FileName.Remove(subpath.IndexOf(subpath), subpath.Length);
string[] allStr = extension.Split('.');
if (allStr[1] == "pdf")
{
using (var stream = new FileStream(saveFileDialog12.FileName, FileMode.Append, FileAccess.Write, FileShare.None))
{
iTextSharp.text.Document document = new iTextSharp.text.Document();
document.SetPageSize(iTextSharp.text.PageSize.A4);
iTextSharp.text.pdf.PdfWriter.GetInstance(document, stream);
if (!document.IsOpen())
document.Open();
for (int i = 0; i < listCanvas.Count; i++)
{
RenderTargetBitmap rtb = new RenderTargetBitmap((int)listCanvas[i].Width, (int)listCanvas[i].Height, 96d, 96d, PixelFormats.Default);
rtb.Render(listCanvas[i]);
// draw the ink strokes onto the bitmap
DrawingVisual dvInk = new DrawingVisual();
DrawingContext dcInk = dvInk.RenderOpen();
dcInk.DrawRectangle(listCanvas[i].Background, null, new Rect(0d, 0d, listCanvas[i].Width, listCanvas[i].Height));
foreach (System.Windows.Ink.Stroke stroke in listCanvas[i].Strokes)
{
stroke.Draw(dcInk);
}
dcInk.Close();
//save bitmap to file
MemoryStream fs = new MemoryStream();
System.Windows.Media.Imaging.JpegBitmapEncoder encoder1 = new JpegBitmapEncoder();
encoder1.Frames.Add(BitmapFrame.Create(rtb));
encoder1.Save(fs);
byte[] tArr = fs.ToArray();
fs.Close();
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(tArr);
image.Alignment = iTextSharp.text.Element.ALIGN_CENTER;
image.ScaleToFit(document.PageSize.Width - 10, document.PageSize.Height - 10);//Resize image depend upon your need
document.Add(image);
document.NewPage();
fs.Close();
}
document.Close();
}
}
}
于 2018-07-06T07:57:05.703 回答
0
您可以从pdfsharp-codeplex 或pdfsharp.net下载 PDF 库 并检查图形示例图像部分,以便您可以先将其保存为 .jpg 然后将其保存为 pdf
于 2011-04-05T03:21:49.413 回答