Как нарисовать прямоугольник на странице PDF?

Я хочу отобразить страницу PDF в элементе управления в winforms, а затем перемещать прямоугольники по PDF, чтобы идентифицировать выбранные пользователем текстовые строки. Я пытаюсь отобразить PDF-файл с помощью элемента управления WebBrowser, но WebBrowser, похоже, не поддерживает GDI.

Может ли кто-нибудь предложить лучший способ рендеринга PDF, чтобы я мог перемещать на нем прямоугольники.


person user2019651    schedule 08.01.2014    source источник


Ответы (2)


Если вы хотите продолжить использование элемента управления WebBrowser, вы можете использовать прозрачную форму, которая перемещается и изменяет размер вместе с базовой формой.

Создайте основную форму Form1 и добавьте в нее элемент управления Webbrowsercontrol. Для этого примера установите .Dock на All. Добавьте вторую форму Form2, на которой ничего нет.

В Form1 вы показываете Form2 и перемещаете ее, если форма перемещается или изменяется.

Public Class Form1
Private Sub MoveForm2()
    Dim crpos As Point = Me.PointToClient(Me.DesktopLocation)
    With Form2
        .DesktopLocation = New Point(Me.DesktopLocation.X - crpos.X, Me.DesktopLocation.Y - crpos.Y)
        .WindowState = Me.WindowState
        .Size = Me.ClientSize
    End With
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    WebBrowser1.Navigate("www.google.com")
    MoveForm2()
    Form2.Show(Me)
End Sub
Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles MyBase.Resize
    MoveForm2()
End Sub
Private Sub Form1_Move(sender As Object, e As EventArgs) Handles MyBase.Move
    MoveForm2()
End Sub
Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
    MoveForm2()
End Sub
End Class

В Form2 вы используете вызов API, чтобы позволить вам щелкнуть форму 2 (взято из VB.net Щелкните через форму ).

Здесь вы также рисуете прямо на форме. Используйте TransparencyKey и BackColor, чтобы сделать его прозрачным.

Imports System.Runtime.InteropServices
Public Class Form2
<DllImport("user32.dll", EntryPoint:="GetWindowLong")> Public Shared Function GetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Integer
End Function
<DllImport("user32.dll", EntryPoint:="SetWindowLong")> Public Shared Function SetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer
End Function

Private Sub Form2_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
    'Draw rectangles here
    Using g As Graphics = Me.CreateGraphics
        g.DrawRectangle(Pens.Red, 100, 100, 100, 100)
    End Using
End Sub


Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.BackColor = Color.Pink
    Me.TransparencyKey = Color.Pink
    Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
    Dim InitialStyle As Integer
    InitialStyle = GetWindowLong(Me.Handle, -20)
    SetWindowLong(Me.Handle, -20, InitialStyle Or &H80000 Or &H20) 'Makes the window "click-throughable"
End Sub

End Class

Это, конечно, довольно грязный хак, но если вы просто хотите самостоятельно перемещать прямоугольники, он должен работать достаточно хорошо. Конечно, вы должны адаптировать этот пример к вашим потребностям.

person Jens    schedule 08.01.2014
comment
Я думаю, это все! Спасибо за помощь. - person user2019651; 10.01.2014
comment
Тогда, пожалуйста, примите этот ответ, чтобы закрыть вопрос. - person Jens; 10.01.2014

Это решение может работать в следующих двух сценариях:
1– Если вы создаете файл PDF самостоятельно и хотите переключиться на PDFSharp для создания файла.
2– Если вы не создаете входные файлы, а вы можете отобразить измененную версию, содержащую прямоугольники, которые вы хотите отобразить.

Я использую ПДФшарп. Является библиотекой .NET с открытым исходным кодом для обработки PDF.

http://www.pdfsharp.com/PDFsharp/

Добавлено: Графика. Графические объекты соответствуют шаблону проектирования платформы .Net. С помощью одного набора функций вы можете рисовать как на странице PDF, так и на объекте System.Drawing.Graphics. Ваше приложение может отображать вывод в окне, на принтере или в документе PDF.

Линии, полилинии, дуги, сплайны Безье, канонические сплайны Прямоугольники, прямоугольники со скругленными углами, эллипсы, многоугольники, круговые диаграммы, замкнутые сплайны, траектории

PDFsharp — это библиотека с открытым исходным кодом, которая легко создает PDF-документы на любом языке .NET. Те же процедуры рисования можно использовать для создания документов PDF, рисования на экране или отправки вывода на любой принтер.

Основные особенности PDFsharp

Создает PDF-документы на лету с любого языка .Net

Простая для понимания объектная модель для составления документов

Один исходный код для рисования на странице PDF, а также в окне или на принтере

Изменение, объединение и разделение существующих PDF-файлов

Изображения с прозрачностью (цветовая маска, монохромная маска, альфа-маска)

Недавно разработан с нуля и полностью написан на C#.

Функции PDFsharp

Ключевая особенность

Создает PDF-документы на лету с любого языка .Net

Простая для понимания объектная модель для составления документов

Один исходный код для рисования на странице PDF, а также в окне или на принтере

Изменение, объединение и разделение существующих PDF-файлов

Изображения с прозрачностью (цветовая маска, монохромная маска, альфа-маска)

Недавно разработан с нуля и полностью написан на C#.

Графические классы хорошо сочетаются с .Net

Может использовать GDI+ или WPF

person Gonzalo    schedule 08.01.2014
comment
У вас есть другой ответ на вопрос пользователя 2019651? Я просто пытаюсь помочь Ему. PDFSharp может рисовать прямоугольники на странице PDF, что ему и нужно. - person Gonzalo; 08.01.2014
comment
С веб-сайта PDFSharp: Графика Графические объекты следуют шаблону проектирования .Net framework. С помощью одного набора функций вы можете рисовать как на странице PDF, так и на объекте System.Drawing.Graphics. Ваше приложение может отображать вывод в окне, на принтере или в документе PDF. Линии, полилинии, дуги, сплайны Безье, канонические сплайны Прямоугольники, прямоугольники со скругленными углами, эллипсы, многоугольники, круговые диаграммы, замкнутые сплайны, траектории - person Gonzalo; 08.01.2014
comment
Из вопроса я понимаю, что ОП хочет рисовать прямоугольники поверх произвольного файла, который он отображает с помощью элемента управления WebBrowser. Если мое предположение верно, ваш ответ не работает для него/нее. - person yms; 08.01.2014
comment
Да, я хочу рисовать и перемещать прямоугольники по произвольному файлу PDF. Цель состоит в том, чтобы идентифицировать текстовые строки внутри заданного пользователем прямоугольника. Я использую iTextSharp для управления извлечением текста PDF. - person user2019651; 08.01.2014