Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.27;
Скачать: CL | DM;

Вниз

Печать ценников из своей программы   Найти похожие ветки 

 
Layner ©   (2005-02-01 15:48) [0]

Приветствую всех!

Есть потребность в генерации и посл. печать на принтере A4, ценников. С написанием проблем в принципе нет, не известено, как бы это реализовать.
Т.е. есть способ такой, генерю Image подложку, рисую на ней ценники, сохраняю BMP файл. Потом эти файлы надо вручную открыть и распечатать.

Ещё есть способ, воспользоваться компонентом EMS Excel Report, но он вроде бы не даст проехаться по одному рекордсету, и при этом вставить на один лист 4 колонки. Т.е. там ОДНА стока = ОДНОЙ и более строк в Excel. (Ценники должны получатся по 4 колонки на лист, может 3 или 4 ряда.)

Другие компаненты отчетов использовать не хотелось бы, хотя если кто то реализовал это с помощью компанентов, напишите, с помощью каких, и много ли работы для его "подключения". Если есть бесплатные компаненты, тоже хотелось бы их тоже узнать.
Заранее спасибо.


 
Digitman ©   (2005-02-01 15:52) [1]


> С написанием проблем в принципе нет


с написанием ЧЕГО ??!!


 
Kerk ©   (2005-02-01 15:53) [2]

Layner ©   (01.02.05 15:48)
печать на принтере A4, ценников.


нифига себе ценники.. А4 !!!


 
Prohodil Mimo ©   (2005-02-01 16:04) [3]

Я делаю это дело так:
генерю RTF, в котором создаю TextBox-ы, или как там они называются, в каждый из них записываю нужный текст. Затем это дело открываю вордом.

Kerk ©   (01.02.05 15:53) [2]
Есть такие листы с наклейками порезаными по определённым размерам. Думаю о подобном идёт речь. Ну или просто бумага, а потом порезать.


 
Alx2 ©   (2005-02-01 16:07) [4]

>Layner ©   (01.02.05 15:48)

А сразу на канве принтера рисовать почему нельзя?


 
Мазут Береговой ©   (2005-02-02 02:13) [5]

Я недавно обращался здесь с таким вопросом. Только это были наклейки. Пришел к следующему решению:
Сделал doc файл для MS Word. Разбил и отформатировал его на две колонки (можно и на больше). Набрал текст и поустанавливал метки. Вот пример наклейки:

Наименование: #1
Продукт: #2
Производитель: #3

Таких наклеек (ценников) может быть несколько на одном листе. И все поля под "Наименованием" имеют метку #1 и так далее.

Открываю этот doc файл объектом word в свой проге, нахожу все метки #1 и заменяю на данные, например, "Молоко" и так далее.

Самый простой и удобный способ:
1. Можно сделать несколько дизайнов для одной наклейки (ценника)
2. Можно автоматизировать это все дело внеся метки, поля, названия файлов в реляционную базу данных
3. В случае изменения дизайна не надо перекомпилировать и переустанавливать прогу...

и т.д.

А вот и код, правда, написанный в Visual Basic.NET.



   Private Function changeValue(ByVal W As Word.Application, ByVal Mark As String, ByVal cValue As String)
       With W.Selection.Find
           .ClearFormatting()
           .Text = Mark
           With .Replacement
               .ClearFormatting()
               .Text = cValue
           End With
           .Execute(Replace:=Word.WdReplace.wdReplaceAll)
       End With
   End Function

   Private Function Numbering(ByVal W As Word.Application, ByVal Mark As String, ByVal vStart As Integer, ByVal vEnd As Integer) As Integer
       Dim i As Integer = vStart
       Dim cnt As Integer = vStart
       Dim rng As Word.Range = W.Selection.Range

       While W.Selection.Find.Execute(FindText:=Mark, Wrap:=Word.WdFindWrap.wdFindContinue)
           rng.Select()

           W.Selection.Find.Execute(FindText:=Mark, ReplaceWith:=cnt, Replace:=Word.WdReplace.wdReplaceOne)
           rng.Select()

           If i < vEnd Then
               i += 1
               cnt = i
           Else
               cnt = 0
           End If

       End While

   End Function

   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGo.Click
       Dim PageCount As Int16 = 1
       Dim QtyPerPage As Int16 = 6
       Dim Pages As Double = CInt(Me.txtCartons.Text) / QtyPerPage
       Dim F As String = "../labelsheet.doc"
       Dim appPath As String = System.AppDomain.CurrentDomain.BaseDirectory
       F = appPath & "/labelsheet.doc"

       PBar.Value = 0

       Try
           If W Is Nothing Then
               W = New Word.Application
               W.Visible = False
           Else
               W.Quit(Word.WdSaveOptions.wdDoNotSaveChanges)
               W = Nothing

               W = New Word.Application
               W.Visible = False
           End If

           PBar.Value = 10

           "open label file
           W.Visible = False
           W.Documents.Open(FileName:=F, ReadOnly:=True)
           W.Visible = False

           PBar.Value = 20
           "make copy in memory
           W.Documents.Item(1).Range.Select()
           W.Selection.Range.Copy()

           "get the end of document
           Dim DocEnd As Int32 = W.Documents.Item(1).Content.End

           PBar.Value = 25

           "correct the number of pages
           If Math.Floor(Pages) < Pages Then Pages = Math.Floor(Pages) + 1

           While PageCount <= Pages - 1
               W.Selection.Move(Word.WdUnits.wdCharacter, DocEnd)
               W.Selection.Paste()
               DocEnd = W.Documents.Item(1).Content.End
               PageCount += 1
           End While

           PBar.Value = 35

           "reset range of document
           W.Documents.Item(1).Range.SetRange(Start:=0, End:=DocEnd)
           W.Documents.Item(1).Range.Select()
           W.Selection.Move(Word.WdUnits.wdCharacter, 0)

           "go insert label fields into $Marks
           changeValue(W, "$PO", Me.txtPO.Text)
           changeValue(W, "$Country", Me.txtCountry.Text)
           changeValue(W, "$LA", Me.txtLA.Text)
           changeValue(W, "$Qty", Me.txtQty.Text)
           changeValue(W, "$Desc", Me.txtDescr.Text)
           changeValue(W, "$NN", Me.txtCartons.Text)
           changeValue(W, "$CNT", Me.txtCnt.Text)

           PBar.Value = 55

           Numbering(W, "$N0", 1, CInt(Me.txtCartons.Text))

           PBar.Value = 70

           "remove selection
           W.Selection.Move(Word.WdUnits.wdCharacter, DocEnd)

           "send to printer
           Dim printPages As String
           If Pages = 1 Then
               printPages = "1"
           Else
               printPages = "1 - " & Pages
           End If

           PBar.Value = 80

           W.PrintOut(Background:=False, Append:=False, _
                   Range:=Word.WdPrintOutRange.wdPrintRangeOfPages, _
                   Item:=Word.WdPrintOutItem.wdPrintDocumentContent, _
                   Copies:="1", Pages:=printPages, _
                   PageType:=Word.WdPrintOutPages.wdPrintAllPages, _
                   PrintToFile:=False, Collate:=True, ManualDuplexPrint:=False)

       Finally
           "do nothing
       End Try
       PBar.Value = 100
   End Sub


 
Мазут Береговой ©   (2005-02-02 02:17) [6]

PBar - ProgressBar, показывающий выполнение...
И еще... Задаю кол-во наклеек. Если их больше чем на один лист, то добавляю к документу word еще одну страницу...


 
Petr V. Abramov ©   (2005-02-02 02:44) [7]

Так вроде в FR3 это нормально делается


 
Ozone ©   (2005-02-02 06:37) [8]

Подобного рода программа писалась мной как первый коммерческий продукт в 10 классе :) Продал помню за 500 р. и бутылку коньяка (сказали родителей угостишь) :)) Решение проблемы пришло во сне - сделал шаблон для каждого вида ценника в QReport и проблем не было... и оч даже удобно по-моему.


 
Digitman ©   (2005-02-02 08:34) [9]

использовать Ёхель для таких целей - крайняя мера ... слишком уж шаткая програмная конструкция получается - всем известны капризы Ёхеля ..

а вот Access (если уж речь об офисе идет как о готовом инструменте для рендеринга) для этой цели как нельзя кстати ..

механизм отчетов Access"а с удивительной легкостью и достаточной надежностью позволяют решать такие задачи


 
Vlad Oshin ©   (2005-02-02 08:59) [10]


>  сделал шаблон для каждого вида ценника

дать юзеру их делать
использую, работает


 
Layner ©   (2005-02-02 20:37) [11]

Здравствуйте!
Проблема была у меня с выходом в инет, только что выбрался, хотел сказать всем большое спасибо за ответы, особенно Мазуту за код, хотя на бейсике ни когда не писал, посмотрю, но главное идея.
И на счет Excel тоже понял, не буду и пробовать :)


 
Мазут Береговой ©   (2005-02-02 21:53) [12]


> Layner ©   (02.02.05 20:37) [11]

Всегда пожалуйста...


 
GanibalLector ©   (2005-02-03 02:11) [13]

Кстати,а если нужно в ценник штрих-код запуздырить...Что теперь скажете?Как бы Вы поступили?

2 Digitman ©   (02.02.05 08:34) [9]
> всем известны капризы Ёхеля
Ну-ну...и какие же?Пока ничего не было(через ОЛЕ работаю).


 
kaif ©   (2005-02-03 02:21) [14]

Я совсем недавно реализовывал точно такую задачу с ценниками при помощи генератора отчетов FastReport. Я вообще впервые работаю с этим генераторов отчетов и ценники в три вертикальных ряда - первый отчет, который я на нем сделал. Времени ушло ровно полчаса, в основном разбирался с размерами при печати, так как на наклейки печатать надо было (попадать четко).
 Очень рекомендую этот генератор. Я не надеялся так быстро и лихо его освоить даже для такой простой задачи.


 
Vlad Oshin ©   (2005-02-03 08:41) [15]


> FastReport.

Удобная штука, только с ним иногда приходится отключать расширенные возможности печати принтера и оптимизацию печати - крякозябы получаются. Причем, почему - непонятно. Ходил к ним(FR ) на страницу, почитал - ничего путного не пишут.


 
Digitman ©   (2005-02-03 09:16) [16]


> GanibalLector ©   (03.02.05 02:11) [13]
> Пока ничего не было


"- У вас на стройке несчастные случаи были ? .. Будут !" (с)


 
Шишкин Илья ©   (2005-02-03 10:40) [17]

2GanibalLector
Не знаю как с цениками, но сделать прогу генерирующую изображение штрих-кода по конкретному коду можно ИМХО за час...
http://mgul-vt.fatal.ru/download/index.php?p=freeware/barcode/


 
Prohodil Mimo ©   (2005-02-03 12:46) [18]

GanibalLector ©   (03.02.05 2:11) [13]
Кстати,а если нужно в ценник штрих-код запуздырить...Что теперь скажете?Как бы Вы поступили?


Я запуздыриваю. Способ тот же. [3]
Для генерации штрих кода использую ЕАН-фонты


 
kaif ©   (2005-02-03 16:19) [19]

Я запуздыриваю. Способ тот же. [3]
Для генерации штрих кода использую ЕАН-фонты


ЕАН стандарт это тот, который число Зверя? Который именно поэтому Государство так любит юзать?


 
Prohodil Mimo ©   (2005-02-03 16:50) [20]

kaif ©   (03.02.05 16:19) [19]
Моя твоя не понимать



Страницы: 1 вся ветка

Текущий архив: 2005.02.27;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.035 c
1-1108312356
Alex31
2005-02-13 19:32
2005.02.27
Как открыть Word и передать "ему" имя файла?


3-1106766390
HATAB
2005-01-26 22:06
2005.02.27
Поиск в БД


1-1108131846
Senti
2005-02-11 17:24
2005.02.27
Как получать и отправлять сообщение потоком


3-1106630033
Lucifer
2005-01-25 08:13
2005.02.27
Отображение поля Time в DBEdit при использовании базы данных MS A


3-1107000205
cherrex
2005-01-29 15:03
2005.02.27
отслежевание изменений в БД