- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的要求是创建有 10 页(比方说)的 xps 文档。我正在使用以下代码创建一个 xps 文档。请看一下。
// Create the new document
XpsDocument xd = new XpsDocument("D:\\9780545325653.xps", FileAccess.ReadWrite);
IXpsFixedDocumentSequenceWriter xdSW = xd.AddFixedDocumentSequence();
IXpsFixedDocumentWriter xdW = xdSW.AddFixedDocument();
IXpsFixedPageWriter xpW = xdW.AddFixedPage();
fontURI = AddFontResourceToFixedPage(xpW, @"D:\arial.ttf");
image = AddJpegImageResourceToFixedPage(xpW, @"D:\Single content\20_1.jpg");
StringBuilder pageContents = new StringBuilder();
pageContents.Append(ReadFile(@"D:\Single content\20.fpage\20.fpage", i));
xmlWriter = xpW.XmlWriter;
xmlWriter.WriteRaw(pageContents.ToString());
}
xmlWriter.Close();
xpW.Commit();
// Commit the fixed document
xdW.Commit();
// Commite the fixed document sequence writer
xdSW.Commit();
// Commit the XPS document itself
xd.Close();
}
private static string AddFontResourceToFixedPage(IXpsFixedPageWriter pageWriter, String fontFileName)
{
string fontUri = "";
using (XpsFont font = pageWriter.AddFont(false))
{
using (Stream dstFontStream = font.GetStream())
using (Stream srcFontStream = File.OpenRead(fontFileName))
{
CopyStream(srcFontStream, dstFontStream);
// commit font resource to the package file
font.Commit();
}
fontUri = font.Uri.ToString();
}
return fontUri;
}
private static Int32 CopyStream(Stream srcStream, Stream dstStream)
{
const int size = 64 * 1024; // copy using 64K buffers
byte[] localBuffer = new byte[size];
int bytesRead;
Int32 bytesMoved = 0;
// reset stream pointers
srcStream.Seek(0, SeekOrigin.Begin);
dstStream.Seek(0, SeekOrigin.Begin);
// stream position is advanced automatically by stream object
while ((bytesRead = srcStream.Read(localBuffer, 0, size)) > 0)
{
dstStream.Write(localBuffer, 0, bytesRead);
bytesMoved += bytesRead;
}
return bytesMoved;
}
private static string ReadFile(string filePath,int i)
{
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite);
StringBuilder sb = new StringBuilder();
using (StreamReader sr = new StreamReader(fs))
{
String line;
// Read and display lines from the file until the end of
// the file is reached.
while ((line = sr.ReadLine()) != null)
{
sb.AppendLine(line);
}
}
string allines = sb.ToString();
//allines = allines.Replace("FontUri=\"/Resources/f7728e4c-2606-4fcb-b963-d2d3f52b013b.odttf\"", "FontUri=\"" + fontURI + "\" ");
//XmlReader xmlReader = XmlReader.Create(fs, new XmlReaderSettings() { IgnoreComments = true });
XMLSerializer serializer = new XMLSerializer();
FixedPage fp = (FixedPage)serializer.DeSerialize(allines, typeof(FixedPage));
foreach (Glyphs glyph in fp.lstGlyphs)
{
glyph.FontUri = fontURI;
}
fp.Path.PathFill.ImageBrush.ImageSource = image;
fs.Close();
string fpageString = serializer.Serialize(fp);
return fpageString;
}
private static string AddJpegImageResourceToFixedPage(IXpsFixedPageWriter pageWriter, String imgFileName)
{
XpsImage image = pageWriter.AddImage("image/jpeg");
using (Stream dstImageStream = image.GetStream())
using (Stream srcImageStream = File.OpenRead(imgFileName))
{
CopyStream(srcImageStream, dstImageStream); // commit image resource to the package file
//image.Commit();
}
return image.Uri.ToString();
}
如果您看到它,我会通过单个图像和单个 fpage 来创建一个 xps 文档。我想传递多个 fpages 列表和图像列表来创建一个包含多个页面的 xps 文档..?
最佳答案
您正在以极其困难的方式执行此操作。我建议走懒人路线。
意识到 XpsDocument 只是 FixedDocumentSequence
的包装器,它包含零个或多个 FixedDocuments
,后者包含零个或多个 FixedPages
。所有这些类型都可以在不编写 XML 的情况下创建、操作和组合。
您真正需要做的就是创建一个包含您需要的任何内容的 FixedPage。这是一个例子:
static FixedPage CreateFixedPage(Uri imageSource)
{
FixedPage fp = new FixedPage();
fp.Width = 320;
fp.Height = 240;
Grid g = new Grid();
g.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
g.VerticalAlignment = System.Windows.VerticalAlignment.Center;
fp.Children.Add(g);
Image img = new Image
{
UriSource = imageSource,
};
g.Children.Add(image);
return fp;
}
这就是 WPF。我正在创建一个固定页面,它的根是一个网格,其中包含一个从给定 Uri 加载的图像。图像将被拉伸(stretch)以填充网格的可用空间。或者,你可以做任何你想做的事。创建一个模板作为 UserControl,将文本发送到自身内部,无论如何。
接下来,您只需要将一堆固定页面添加到XpsDocument
。这非常困难,所以请仔细阅读:
public void WriteAllPages(XpsDocument document, IEnumerable<FixedPage> pages)
{
var writer = XpsDocument.CreateXpsDocumentWriter(document);
foreach(var page in pages)
writer.Write(page);
}
这就是您需要做的全部。创建您的页面,将它们添加到您的文档中。完成。
关于c# - 如何在xps中将多个fpages添加到固定文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17141637/
有没有办法在使用 WPF XPS 查看器打印 XPS 时设置默认布局方向? 我的固定文档 XPS 的页面方向设置为横向,页面媒体大小的宽度大于其高度,并且在查看器中正确显示为横向。 只是当您点击打印按
我正在将 WPF FlowDocument 保存到文件系统,使用此代码和带有 xps 扩展名的文件名: // Save FlowDocument to file system as XPS docum
我正在研究批量打印解决方案。 要打印的文件将采用各种(典型)格式,例如 PDF、Word、Excel 等。根据我收集(和测试)的结果,打印 XPS 文件是在 Windows 平台上进行的方式。 但是,
使用 Microsoft XPS Document Writer 打印 pdf 文档: string filename = "C:\\1.pdf"; Process process = new Pro
在他的博客条目中 Printing documents to Microsoft XPS Document Writer without user interaction冯远说 If you're p
我们的工具允许导出为 PNG,效果非常好。 现在,我想将导出添加到某种矢量格式。我尝试了 XPS,但结果根本不令人满意。 看看对比http://www.jakubmaly.cz/xps-vs-png.
我正在尝试在 XPS 文档中添加注释。是否可以使用 .Net API 并读取它们?我需要添加嵌入在 XPS 文件中的隐藏文本。 最佳答案 您可以使用 XpsDocument class 将元数据添加到
当我阅读有关 WPF 的书籍时,我看到作者提到 XPS 就像它很重要一样。 Windows 还包括它的 XPS 查看器,我已经看到它被列为 Windows 的“功能”。 但为什么?重点是什么?谁他妈的
XPS 文档的安全性如何?从XPS内部查看后文档中,找到了 Unicode-string 属性。有人可以注入(inject) e.x.吗?将脚本写入 Unicode 字符串属性? XPS 查看器如何处
我喜欢 DocumentViewer 在 WPF 应用程序中显示 XPS 文档。但我还需要编辑 XPS 文档。我找到了用于编辑 XPS 的独立应用程序 (.exe)。我需要的是一个用于查看和编辑 XP
我认为,XPS 文件类似于 PDF 文件,但 XPS 文件的结构是什么?就像 PDF 文件一样? 最佳答案 XPS vs. PDF on CNET 摘录: XPS 文档更像是 ZIP 存档文件,包含在
我正在用 C# 创建一个 asp.net web 应用程序来将一堆 .xps 文件转换为 .pdf 我想验证输入文件是出于安全原因,按其内容类型而不是文件扩展名转换。 最佳答案 According t
我尝试打印到 XPS 打印机(它不是我的默认打印机),但程序打开了一个对话框。我可以跳过对话框吗?这是代码: pSettings = new PrinterSettings()
我将使用 PrintDocument 显示我的 C# WinForms 应用程序的一部分,这几乎完成了,但是我的打印机出现了问题。我使用以下代码捕获表单图像,然后打印该图像,最后我使用 PrintPr
首先,我想指出,我已将此问题作为一个错误提交给 Microsoft,但他们此时不愿修复它。我正在寻找一种解决方法或更好的方法来实现我正在尝试做的事情,因为我们的客户认为这是一个相当重要的问题。 代码
如果用户打印报告,并且他们碰巧正在使用 微软 XPS 打印机 ,我希望默认文件名有意义。 我原以为 XPS 打印机会采用打印作业的名称,并将其用作默认文件名 - 但事实并非如此。 当我打印到该打印机时
我有一个 C# WinForms 应用程序。用户上传一个 .XPS 文件并指定一些打印机设置(份数、纸盒等)。该程序需要以编程方式打印具有这些设置的文档。即,不能有要打印的用户交互。 我可以接近 Sy
我的代码生成一个 saveFileDialog 来保存一个 .xps 文件,而不是实际打印任何东西。我的代码有问题吗?如果没有,我如何配置我的机器才能使此代码正常工作? class Printer {
我需要用 C# 保护 XPS 文档,但我找不到任何库,请帮助我... 谢谢。 最佳答案 我不完全确定“保护 XPS 文档”是什么意思。 如果您的意思是添加签名以便读者可以验证文档是否由您生成,我建议您
我需要拆分现有的 XPS 文档并创建一个只有原始文档的一页的新 XPS 文档。我尝试复制文档并从复制的文档中删除页面,但速度很慢。有没有更有效的方法来做到这一点?请使用 C#。 谢谢。 已解决: pu
我是一名优秀的程序员,十分优秀!