나는 조금 늦게,하지만 여기에 내가 생각 해낸 해결책 알고있다.
먼저 우리를 위해 문서 페이지를 생성 할 래퍼를 만듭니다. 반환하기 전에 각 페이지에 스케일 변환이 적용됩니다. 당신이 관심이 있다면, 여기
private void PrintDocument(PrintDialog pd, FlowDocument document, double scale, string title)
{
DocumentPaginator dp = ((IDocumentPaginatorSource)document).DocumentPaginator;
FittedDocumentPaginator fdp = new FittedDocumentPaginator(dp, scale);
pd.PrintDocument(fdp, title);
}
우리는 규모를 결정하는 방법이다 : 그것을 사용
public class FittedDocumentPaginator : DocumentPaginator
{
public DocumentPaginator Base { get; private set; }
public double Scale { get; private set; }
private readonly ScaleTransform _sTransform;
public FittedDocumentPaginator(DocumentPaginator baseDp, double scale)
{
if (baseDp == null)
throw new ArgumentNullException("baseDp");
Base = baseDp;
Scale = scale;
_sTransform = new ScaleTransform(scale, scale);
}
public override DocumentPage GetPage(int pageNumber)
{
var page = Base.GetPage(pageNumber);
((ContainerVisual)page.Visual).Transform = _sTransform;
return page;
}
public override bool IsPageCountValid
{
get { return Base.IsPageCountValid; }
}
public override int PageCount
{
get { return Base.PageCount; }
}
public override Size PageSize
{
get { return Base.PageSize; }
set { Base.PageSize = value; }
}
public override IDocumentPaginatorSource Source
{
get { return Base.Source; }
}
}
은 매우 간단합니다. 우리의 경우, 문서는 페이지 너비를 넘어서 확장되었지만 페이지 높이를 수용하도록 쉽게 수정할 수 있습니다.
private void Print(FlowDocument document, string title, double documentWidth)
{
var pd = new PrintDialog();
if (pd.ShowDialog() == true)
{
// Set the printing margins.
Thickness pageMargins = document.PagePadding;
document.PagePadding = new Thickness(15.0);
// In our case, the document's width is NaN so we have to navigate the visual tree to get the ActualWidth, which is represented by 'documentWidth'.
double scale = documentWidth/pd.PrintableAreaWidth;
if (scale < 1.0)
{
// The report fits on the page just fine. Don't scale.
scale = 1.0;
}
double invScale = 1/scale;
document.PageHeight = pd.PrintableAreaHeight * scale;
document.PageWidth = pd.PrintableAreaWidth * scale;
DocumentPaginator dp = ((IDocumentPaginatorSource)document).DocumentPaginator;
FittedDocumentPaginator fdp = new FittedDocumentPaginator(dp, invScale);
pd.PrintDocument(fdp, title);
// Restore the original values so the GUI isn't altered.
document.PageHeight = Double.NaN;
document.PageWidth = Double.NaN;
document.PagePadding = pageMargins;
}
}
이 문제에 대한 해결책을 찾았습니까? –
아니요 아직 안 됐습니다. 나는 정착해야했고 itemsControl 안에 wrappanel을 넣어야했다. 이것은 처음부터하지 않기를 바랬다. – Johnathan1