2014-01-08 5 views
1

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

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

ответ

-2

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

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

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

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

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

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

PDFsharp Основные

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

Легко понять объектную модель, чтобы составить документы

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

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

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

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

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

Основные характеристики

для создания PDF-документов на летать от любого.Чистый язык

Легко понять, объектная модель, чтобы составить документы

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

Modify, слияния и раскол существующих PDF-файлов

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

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

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

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

+1

PDFSharp даже не делает PDF-файлы ... – yms

+0

У вас есть еще один ответ на вопрос user2019651? Я просто пытаюсь помочь Ему. PDFSharp может рисовать прямоугольники над PDF-страницей, что ему и нужно. – Gonzalo

+0

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

2

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

Создайте свою основную форму Form1 и добавьте к ней Webbrowsercontrol. В этом примере установите .Dock для всех. Добавьте вторую форму, 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, чтобы вы щелкаете через Form2 (вырванные из VB.net Click through form).

Здесь вы также рисуете непосредственно на форме. Используйте 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 

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

+0

Я думаю, что все! Спасибо за помощь. – user2019651

+1

Тогда, пожалуйста, примите этот ответ, чтобы закрыть вопрос. – Jens

Смежные вопросы