- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法使用 Richeditbox 进行多页打印。我在名为 Editor 的 Xaml 中有 Richeditbox。我使用自定义 GetText() 函数来获取编辑器中的所有内容。我已经能够打印单页,但不知道如何制作多页。
我试图查看 Microsoft 文档和这个 PrintHelper class .我仍然不确定我应该如何在我的项目中实现它。
所以主要问题是我应该如何使用 richeditbox 打印多页?
下面是我的项目打印代码,是的,我知道有硬编码:printDoc.SetPreviewPageCount(1, PreviewPageCountType.Final);但不知道我应该如何计算那些页数
private PrintManager printMan;
private PrintDocument printDoc;
private IPrintDocumentSource printDocSource;
public MainPage()
{
InitializeComponent();
// Register for PrintTaskRequested event
printMan = PrintManager.GetForCurrentView();
printMan.PrintTaskRequested += PrintTaskRequested;
// Build a PrintDocument and register for callbacks
printDoc = new PrintDocument();
printDocSource = printDoc.DocumentSource;
printDoc.Paginate += Paginate;
printDoc.GetPreviewPage += GetPreviewPage;
printDoc.AddPages += AddPages;
}
private async void Print_Click(object sender, RoutedEventArgs e)
{
if (PrintManager.IsSupported())
{
try
{
// Show print UI
await PrintManager.ShowPrintUIAsync();
}
catch
{
// Printing cannot proceed at this time
ContentDialog noPrintingDialog = new ContentDialog()
{
Title = "Printing error",
Content = "\nSorry, printing can' t proceed at this time.",
PrimaryButtonText = "OK"
};
await noPrintingDialog.ShowAsync();
}
}
else
{
// Printing is not supported on this device
ContentDialog noPrintingDialog = new ContentDialog()
{
Title = "Printing not supported",
Content = "\nSorry, printing is not supported on this device.",
PrimaryButtonText = "OK"
};
await noPrintingDialog.ShowAsync();
}
}
private void PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs args)
{
// Create the PrintTask.
// Defines the title and delegate for PrintTaskSourceRequested
var printTask = args.Request.CreatePrintTask("Print", PrintTaskSourceRequrested);
// Handle PrintTask.Completed to catch failed print jobs
printTask.Completed += PrintTaskCompleted;
}
private void PrintTaskSourceRequrested(PrintTaskSourceRequestedArgs args)
{
// Set the document source.
args.SetSource(printDocSource);
}
private void Paginate(object sender, PaginateEventArgs e)
{
printDoc.SetPreviewPageCount(1, PreviewPageCountType.Final);
}
private void GetPreviewPage(object sender, GetPreviewPageEventArgs e)
{
string text = GetText(); ;
RichEditBox richTextBlock = new RichEditBox();
richTextBlock.Document.SetText(TextSetOptions.FormatRtf, text);
richTextBlock.Background = new SolidColorBrush(Windows.UI.Colors.White);
printDoc.SetPreviewPage(e.PageNumber, richTextBlock);
}
private void AddPages(object sender, AddPagesEventArgs e)
{
string text = GetText(); ;
RichEditBox richTextBlock = new RichEditBox();
richTextBlock.Document.SetText(TextSetOptions.FormatRtf, text);
richTextBlock.Background = new SolidColorBrush(Windows.UI.Colors.White);
richTextBlock.Padding = new Thickness(20,20,20,20);
printDoc.AddPage(richTextBlock);
// Indicate that all of the print pages have been provided
printDoc.AddPagesComplete();
}
private async void PrintTaskCompleted(PrintTask sender, PrintTaskCompletedEventArgs args)
{
// Notify the user when the print operation fails.
if (args.Completion == PrintTaskCompletion.Failed)
{
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
{
ContentDialog noPrintingDialog = new ContentDialog()
{
Title = "Printing error",
Content = "\nSorry, failed to print.",
PrimaryButtonText = "OK"
};
await noPrintingDialog.ShowAsync();
});
}
}
最佳答案
RichTextBlock 具有 OverflowContentTarget 属性。您应该在那里指定 RichTextBlockOverflow 控件。 RichTextBlockOverflow 控件也可能有 OverflowContentTarget。因此,您添加附加页面并查看它是否有溢出内容。不适合页面的内容流向下一个溢出控制等等。因此,您一页一页地呈现页面,直到溢出时没有任何内容,此时您知道页数。
正是我所说的,但在他们的官方 docs :
lastRTBOOnPage = AddOnePrintPreviewPage(null, pageDescription);
// We know there are more pages to be added as long as the last RichTextBoxOverflow added to a print preview
// page has extra content
while (lastRTBOOnPage.HasOverflowContent && lastRTBOOnPage.Visibility == Windows.UI.Xaml.Visibility.Visible)
{
lastRTBOOnPage = AddOnePrintPreviewPage(lastRTBOOnPage, pageDescription);
}
MS 文档跳过了重要且难以理解的点。关于打印的最佳文档是这个 blog迪德里克·克罗尔斯 (Diederic Krols) 着。还有不错的article他写了如何从 ItemsControl 打印。 (但它更高级)它适用于 Windows 8,但 API 从那时起就没有改变。
关于c# - UWP richeditbox打印多页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52881344/
我在 Windows 8 中使用新的 RichEditBox 并尝试选择文本范围并更改文本颜色。下面的代码将添加下划线并更改所选文本的背景,但 ForegroundColor 不会更改,文本只是保持黑
我试过下面的代码,但它抛出异常System.ArgumentException,异常信息是: Value does not fall within the expected range. public
我正在构建 Windows Phone 8.1/Windows 8.1 应用程序 (WinRT),并且我正在使用 RichEditBox 控件。每次我向其中添加文本时,光标都会转到文本的开头,但我找不
需要用五种颜色高亮文档RichEditBox中的一个子字符串。为此我写了一个方法: private async Task ChangeTextColor(string text, Color colo
有没有办法禁用或覆盖 WinRT RichEditBox 控件上的键盘快捷键?我希望能够在您按下 Ctrl-B 和 Ctrl-I 时禁用粗体和斜体格式。 我避免使用常规的纯文本框,因为我想使用 Ric
我将 URL 中的图像插入到 RichEditBox 中,如下所示: // Create a MemoryStream from uri, and insert into richeditbox Sy
我将 RichEditBox 用于富文本编辑器:当用户在 richEditBox 控件中键入文本时,我对文本中的不同关键字使用不同的颜色。 在进行更改之前,我保存当前选择位置: ITextSelect
我正在开发一个 UWP 应用程序,我正在使用 RichEditBox控件,我在使用撤消功能时遇到了一些问题。 我知道我可以使用 ITextDocument 中的 BeginUndoGroup 方法Ri
我正在尝试在 ;RichEditBox 中获取和设置富文本,但每次执行 GetText 然后执行 SetText 时,都会添加一个额外的回车符。这是一个 super 简单的示例,其中包含一个按钮,该按
我正在尝试在 ;RichEditBox 中获取和设置富文本,但每次执行 GetText 然后执行 SetText 时,都会添加一个额外的回车符。这是一个 super 简单的示例,其中包含一个按钮,该按
我想知道是否可以在 UWP C# 中显示 RichEditBox 的行号(在单独的列中) ,或者如果有其他方法可以得到它。我正在寻找这个问题的解决方案......我觉得很奇怪,没有关于它的文档:我只需
所以我只是想弄清楚如何从我的应用程序的 View 模型中访问 RichEditBox 控件。如果不使用反模式,这是否可能? 我知道在 View Model 中访问控件的唯一方法是将其传递给 View
我想用 Open File Picker 打开一个文本文件并在 RichEditBox 中显示,但是当我选择文件并按下 Ok 时,Visual Studio 显示“Access Denied”,我想知
搜索了很长时间以将一些 RTF 文本绑定(bind)到 Windows 应用商店应用程序上的 RichEditBox 控件。即使它应该在 TwoMay 绑定(bind)模式下运行。... 最佳答案 .
C# 中的RichEditBox 控件(我使用的是VS 2005)性能不佳。我将一个 2.5 MB 的 RTF 文件和 45.000 行彩色文本加载到控件中,这需要 4 分钟。我将相同的 RTF 加载
我想创建一个支持 Inking Like OneNote 的 RichEditBox。它应该具有两者的功能,例如文本格式和墨迹编辑。 注:我已申请 UWPCommunityToolkit为此创建一个新
我有一个带有 RichEditBox 的 Windows 应用商店应用程序(编辑)和一个 Grid (边注)。 我需要始终匹配两个元素的垂直滚动位置。这样做的目的是允许用户在文档的页边空白处添加注释。
我在 UWP 项目中有一个 RichEditBox。 是否可以使用所有新行提取用户编写的文本? 我找不到像 RichEditBox.Text 这样的属性。 对于我的目的,这可能是错误的工具吗? 最佳答
使用 UWP 中的普通 TextBox,您可以数据绑定(bind)到 Text 属性,并轻松地从 ViewModel 获取或设置值。 RichEditBox虽然没有可绑定(bind)数据的 Text
这是我正在处理的对象: class TopNews { public string Id { get; set; } public string Title { get; set; }
我是一名优秀的程序员,十分优秀!