【发布时间】:2019-11-13 12:41:26
【问题描述】:
我有一个功能可以将我的布局打印到 PDF 文件(使用 PDFSharp 库)。
我的问题是我的Grid 包含一个ScrollViewer。
问题是ScrollViewer 在 PDF 文件中显然不可滚动。
有什么办法可以改变吗?
Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
dlg.FileName = "NHF Tool";
dlg.DefaultExt = ".pdf";
dlg.Filter = "PDF (.pdf)|*.pdf";
Nullable<bool> result = dlg.ShowDialog();
try
{
if (result == true)
{
MemoryStream lMemoryStream = new MemoryStream();
Package package = Package.Open(lMemoryStream, FileMode.Create);
XpsDocument doc = new XpsDocument(package);
XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(doc);
writer.Write(MainCanvas);
doc.Close();
package.Close();
var pdfXpsDoc = PdfSharp.Xps.XpsModel.XpsDocument.Open(lMemoryStream);
PdfSharp.Xps.XpsConverter.Convert(pdfXpsDoc, dlg.FileName, 0);
}
}
catch (System.IO.IOException)
{
MessageBox.Show("TEMP");
}
<Window x:Class="NHF_Tool.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:NHF_Tool"
Title="Test" Height="800" Width="1525">
<Grid Background="Gainsboro">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<GroupBox Grid.Row="0" Header="Test1" Margin="10">
<Grid>
<Button Content="Sample content" Margin="20"/>
</Grid>
</GroupBox>
<GroupBox Grid.Row="1" Header="Test2" Margin="10">
<ScrollViewer x:Name="ScrollViewer">
<StackPanel Orientation="Vertical">
<Rectangle Fill="LightYellow" Height="300" Margin="20"/>
<TextBox HorizontalAlignment="Center" Grid.Row="1" Text="TextBox"/>
</StackPanel>
</ScrollViewer>
</GroupBox>
</Grid>
</Window>
【问题讨论】:
-
也许您可以暂时将
MainWindow.Height属性更改为足够大的值,等待新的布局/渲染通道,然后再打印到 PDF? -
这似乎是个好主意。
-
您能否使您的示例 XAML 完全正常运行?删除所有无用的标记、添加结束标记、使用示例数据填充它等。我们希望能够复制粘贴您的代码并立即了解您的问题。
-
我编辑了一个文本框。它自然会被切断。
-
您的 XAML 中似乎有 很多 的
Margin、Width、Height... 硬编码值,这使您的窗口绝对没有反应灵敏。我认为您的第一步是删除主要的Canvas,并开始使用更合适的布局面板,如Grid。之后调整大小会容易得多。