From 7b100618f5ea4420b410502bc80c0df8c6d3440a Mon Sep 17 00:00:00 2001 From: matmair Date: Mon, 19 Feb 2024 21:04:28 +0000 Subject: [PATCH] deploy: 3c850251de8663dba1500eeeac7bfa26b3c7bac6 --- SchrodingersGat/inventree-brother-plugin.html | 4 +- SchrodingersGat/inventree-wireviz.html | 4 +- SergeoLacruz.html | 4 +- SergeoLacruz/inventree-supplier-panel.html | 4 +- SergeoLacruz/inventree-zebra-plugin.html | 137 ++++++++++++++---- afkiwers/inventree-kicad.html | 4 +- afwkiers.html | 4 +- assets/plugins/qr.png | Bin 0 -> 49321 bytes blog/feed.atom | 2 +- extend/app.html | 2 + functions.html | 2 + lippoliv.html | 4 +- .../inventree-default-salesorder-items.html | 4 +- matmair.html | 4 +- matmair/inventree-apprise.html | 4 +- matmair/inventree-rapidoc.html | 4 +- matmair/inventree-zapier.html | 4 +- news/feed.atom | 2 +- schrodingersgat.html | 4 +- sitemap.xml | 34 ++--- wolflu05.html | 4 +- wolflu05/inventree-bulk-plugin.html | 4 +- wolflu05/inventree-cups-plugin.html | 4 +- 23 files changed, 160 insertions(+), 83 deletions(-) create mode 100644 assets/plugins/qr.png diff --git a/SchrodingersGat/inventree-brother-plugin.html b/SchrodingersGat/inventree-brother-plugin.html index f88ad5a6..9da59dbf 100644 --- a/SchrodingersGat/inventree-brother-plugin.html +++ b/SchrodingersGat/inventree-brother-plugin.html @@ -31,11 +31,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"SchrodingersGat"},"dateModified":"2024-02-19T21:04:18+00:00","datePublished":"2024-02-19T21:04:18+00:00","description":"Brother label printer plugin for InvenTree","headline":"Inventree Brother Plugin","mainEntityOfPage":{"@type":"WebPage","@id":"/SchrodingersGat/inventree-brother-plugin"},"url":"/SchrodingersGat/inventree-brother-plugin"} diff --git a/SchrodingersGat/inventree-wireviz.html b/SchrodingersGat/inventree-wireviz.html index a62e749e..9db97380 100644 --- a/SchrodingersGat/inventree-wireviz.html +++ b/SchrodingersGat/inventree-wireviz.html @@ -31,11 +31,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"SchrodingersGat"},"dateModified":"2024-02-19T21:04:18+00:00","datePublished":"2024-02-19T21:04:18+00:00","description":"Wireviz Extension for InvenTree","headline":"Inventree Wireviz","mainEntityOfPage":{"@type":"WebPage","@id":"/SchrodingersGat/inventree-wireviz"},"url":"/SchrodingersGat/inventree-wireviz"} diff --git a/SergeoLacruz.html b/SergeoLacruz.html index 3663032f..e9238039 100644 --- a/SergeoLacruz.html +++ b/SergeoLacruz.html @@ -30,11 +30,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","dateModified":"2024-02-19T21:04:18+00:00","datePublished":"2024-02-19T21:04:18+00:00","description":"Hardware engineer in Germany and vintage fan.","headline":"Sergeolacruz","mainEntityOfPage":{"@type":"WebPage","@id":"/SergeoLacruz"},"url":"/SergeoLacruz"} diff --git a/SergeoLacruz/inventree-supplier-panel.html b/SergeoLacruz/inventree-supplier-panel.html index fe74c994..93922cb3 100644 --- a/SergeoLacruz/inventree-supplier-panel.html +++ b/SergeoLacruz/inventree-supplier-panel.html @@ -31,11 +31,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"SergeoLacruz"},"dateModified":"2024-02-19T21:04:18+00:00","datePublished":"2024-02-19T21:04:18+00:00","description":"Create Mouser shopping cart from purchase order","headline":"Inventree Supplier Panel","mainEntityOfPage":{"@type":"WebPage","@id":"/SergeoLacruz/inventree-supplier-panel"},"url":"/SergeoLacruz/inventree-supplier-panel"} diff --git a/SergeoLacruz/inventree-zebra-plugin.html b/SergeoLacruz/inventree-zebra-plugin.html index 3a5c5a97..bbaad0d2 100644 --- a/SergeoLacruz/inventree-zebra-plugin.html +++ b/SergeoLacruz/inventree-zebra-plugin.html @@ -31,11 +31,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"SergeoLacruz"},"dateModified":"2024-02-19T21:04:18+00:00","datePublished":"2024-02-19T21:04:18+00:00","description":"Zebra Label Printer Plugin for Inventree","headline":"Inventree Zebra Plugin","mainEntityOfPage":{"@type":"WebPage","@id":"/SergeoLacruz/inventree-zebra-plugin"},"url":"/SergeoLacruz/inventree-zebra-plugin"} @@ -77,20 +77,19 @@

Zebra Label Printer Plugin for Inventree

This is a label printing plugin for InvenTree, which provides support for Zebra Label printers . -It supports printing to just GK420T with one label size (50x30) so far. So it is very simple. It uses the zpl library to -convert the png data provided by InvenTree to Zebras bitmap format.

+It was only tested with GK420T but should work for other ZPL printers too. It uses the ZPL library to +convert the png data provided by InvenTree to Zebra’s bitmap format.

It can output the print data either to a local printer connected to the computer via USB or to a network printer -with an IP address. The output can be configured in the InvenTree plugin user interface. So the source code is -a good example for this.

+with an IP address. The output can be configured in the InvenTree plugin user interface.

Error handling is very basic.

Installation

-

Install this plugin using pip with the following command::

+

The plugin is on pypi. Install this plugin using pip with the following command:

-
pip install git+https://github.com/SergeoLacruz/inventree-zebra-plugin
+
pip install inventree-zebra-plugin
 

Configuration Options

@@ -105,11 +104,54 @@ a good example for this.

Local Device

In case of a local printer set the device here. The plugin actually puts the data directly to the -device libe /dev/usb/lp0. No printer spooler is involved so far.

+device /dev/usb/lp0. No printer spooler is involved so far.

+ +

Threshold

+

The image from pillow comes in greyscale. The plugin converts it ti pure BW because this gives a much +better print result. The threshold between black and white can be adjusted here.

+ +

Darkness

+

This is a value that influences the darkness of the print. Allowed values are 0 (white) to 30 (black). +It is directly converted to a SD command in ZPL. If your black areas tend to blur out reduce the +darkness.

+ +

Dots per mm

+

This sets the resolution of the printer. You can choose between 8, 12 and 24 +dpmm depending on your printer model.

+ +

Printer init

+

This string added to the printer output. It can be used to set special commands +e.g. label rotation, mirror or white on black. Please refer to the ZPL manual +for more information.

+ +

Zebra printers store settings after printing. So if a rotated label has been +printed all following label will be rotated unless you change it. The default +sets the printer to settings that have been useful for me. You might want to +change it according to your requirements. Please keep in mind that this string +is passed directly to the printer without any checks. So be careful when editing +here.

+ +

Label Template

+

The label needs a template described in html and css. The template should start with a page definition +that defines the label size as shown below:

+ +
    @page {
+        {% localize off %}
+        height: mm;
+        width: mm;
+        {% endlocalize %}
+        padding: 0mm;
+        margin: 0px 0px 0px 0px;
+        background-color: white;
+    }
+
+ +

The height and width parameters are defined in the InvenTree admin panel in the label section. These values +have to fit the label size that is in the printer. See the example templates for details on template definition.

How it works

-

First import all the stuff you need. Here we use the translation mechanism from django for multi language support. -The import the InvenTree libs and everything you need for plugin. Here we have zpl for the Zebra bitmaps and socket +

First import all the stuff you need. Here we use the translation mechanism from Django for multi language support. +The import the InvenTree libs and everything you need for plugin. Here we have ZPL for the Zebra bitmaps and socket for the IP connection to the printer.

The next part is this:

@@ -150,7 +192,7 @@ need to be like that. The values are found in the UI as shown in the pictures be

We need to define a dict with the name SETTINGS. Please be aware the keys need to be in all CAPITAL letters like CONNECTION. Simple parameters are just text strings like the port. We can set a default. The name and description shows up in the UI. -Instead of ta simple test we can also use choices. The first string like “local” it the key you use in the code. The second +Instead of a simple text we can also use choices. The first string like “local” it the key you use in the code. The second one is the description in the UI. After that we need to define a function:

@@ -164,12 +206,15 @@ After that we need to define a function:

  • user
  • filename
  • label_instance
  • +
  • item_instance
  • width
  • height
  • png_file
  • -

    For the Zebra printer we use the png_file. This is a PIL (python Pillow) object with the graphic of the label in PNG format. +

    The item_instance is the part to be printed. This allows direct access to all part data. The arguments width and height +come from the settings of the label in the admin interface. NOT from the html template. +For the Zebra printer we use the png_file. This is a PIL (python Pillow) object with the graphic of the label in PNG format. The PIL object is a greyscale image. Because the printer can just print pure BW we convert this to a BW picture.

    fn = lambda x : 255 if x > Threshold else 0
    @@ -177,34 +222,62 @@ The PIL object is a greyscale image. Because the printer can just print pure BW
     

    The threshold can by modified by a plugin parameter. 200 is a good starting value. This trick gives much better prints. -We can put the result this directly into the zpl library.

    +We can put the result of this directly into the ZPL library.

    -
    l = zpl.Label(50,30,8)
    +
    l = zpl.Label(Height, Width, dpmm)
     l.origin(0, 0)
    -l.write_graphic(label_image, 50)
    +...
    +l.write_graphic(label_image, Width)
     l.endorigin()
     
    -

    50,30 is the size of the label in millimeters. The third parameter is the resolution of the printer in -dots per mm. As the Zebra printer has 200dpi we put an eight here. write_graphic converts the pillow data -to zpl. 50 is the with of the image in mm.

    +

    Width and Height define is the size of the label in millimeters as described above. +The third parameter is the resolution of the printer in dots per mm. +write_graphic converts the pillow data to ZPL.

    -

    The plugin was tested with a label of 50x30 mm defined using css and html in InvenTree as shown below. The DPI scaling -can be chosen in the InvenTree settings. 400 is a good value because it is just double of the printers -resolution. If you save the pillow data to a png file you get a size of 788x473 which fits well to that data.

    - -
    <style>
    -    @page {
    -        width: 50mm;
    -        height: 30mm;
    -        padding: 0mm;
    -        margin: 0px 0px 0px 0px;
    -        background-color: white;
    -    }
    -
    +

    The plugin was tested with a labels of various sizes defined using css and html. The DPI scaling +can be chosen in the InvenTree settings. 800 is a good value because it gives high quality.

    The rest of the code is just output to the printer on different interfaces.

    +

    Quality matters

    +

    The InvenTree printer system uses a graphical representation of the label. The label is described +in HTML, converted to a pixel graphic and printed. The advantage is independency from printer +models and systems. Disadvantage is larger data and quality problems with darkness and scaling. +Let’s have a look at the following printout:

    + +

    QRCodes

    + +

    Both codes have been printed with the same printer on the same reel. The left one is +hardly readable using my mobile. The right one reads easily even as it is smaller.

    + +

    Secret 1, Scale

    +

    The printer resolution is 8 dots per mm resulting in a dot size of 0.125mm. The QR code pixel +and the printer pixel size should be integrally divisible. The code in the picture has 21 +pixels plus one in the frame, so 23 pixel. The frame is set in the HTML description.

    + +
    {% qrcode qr_data border=1 %}
    +
    + +

    I selected two dots per pixel. So 23 * 2 * 0.125 = 6.125mm. If the size is something different +scaling takes place and the result might be worse. If you like a larger printout select more +dots per pixel. From a certain size upwards the value does not matter any more because the code +gets large enough to be readable in any quality.

    + +

    Secret 2: Darkness

    +

    Zebra printers allow to set the darkness of the print in values between 0 (white) and 30 (max) +The left code was printed with a value 0r 30. The black dots tend to blur out a bit resulting +in smaller white areas. The right code was printed with a value of 25 resulting in larger white +pixels. The darkness values are just examples. Your values will differ based on printer model, +media type and printer age. The printer head tends to wear out and the darkness value might +need an adjustment from time to time.

    + +

    Alternative

    +

    You can also bypass the InvenTree template and printing system and directly create ZPL from +the parts data. The printer knows best how to render the label and the print quality is best. +If you are interested in this way have a look at the inventree-zpl-plugin +that does exactly that.

    +
    diff --git a/afkiwers/inventree-kicad.html b/afkiwers/inventree-kicad.html index b9c12940..1e373441 100644 --- a/afkiwers/inventree-kicad.html +++ b/afkiwers/inventree-kicad.html @@ -31,11 +31,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"afkiwers"},"dateModified":"2024-02-19T21:04:18+00:00","datePublished":"2024-02-19T21:04:18+00:00","description":"KiCad Integration for InvenTree","headline":"Inventree Kicad","mainEntityOfPage":{"@type":"WebPage","@id":"/afkiwers/inventree-kicad"},"url":"/afkiwers/inventree-kicad"} diff --git a/afwkiers.html b/afwkiers.html index f3e19d67..2bb793eb 100644 --- a/afwkiers.html +++ b/afwkiers.html @@ -30,11 +30,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","dateModified":"2024-02-19T21:04:18+00:00","datePublished":"2024-02-19T21:04:18+00:00","description":"InvenTree is an open-source inventory management system which provides intuitive parts management and stock control. It is at the center of an ecosystem of addins for EDA tools, API wrapper, deeply integrated plugins and 3rd party tools.","headline":"Afwkiers","mainEntityOfPage":{"@type":"WebPage","@id":"/afwkiers"},"url":"/afwkiers"} diff --git a/assets/plugins/qr.png b/assets/plugins/qr.png new file mode 100644 index 0000000000000000000000000000000000000000..266a45b81889cbe574b3606d43007f821500c601 GIT binary patch literal 49321 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 Qs2em*RXvqjrT;$vFRGXYFaQ7m literal 0 HcmV?d00001 diff --git a/blog/feed.atom b/blog/feed.atom index d38a2285..7ceee8c0 100644 --- a/blog/feed.atom +++ b/blog/feed.atom @@ -1,4 +1,4 @@ -Jekyll2024-02-19T20:47:40+00:00/blog/feed.atomInvenTreeInvenTree is an open-source inventory management system which provides intuitive parts management and stock control. It is at the center of an ecosystem of addins for EDA tools, API wrapper, deeply integrated plugins and 3rd party tools.2023 in Review2024-01-13T00:00:00+00:002024-01-13T00:00:00+00:00/blog/2024/01/13/upcoming2023 in Review +Jekyll2024-02-19T21:04:18+00:00/blog/feed.atomInvenTreeInvenTree is an open-source inventory management system which provides intuitive parts management and stock control. It is at the center of an ecosystem of addins for EDA tools, API wrapper, deeply integrated plugins and 3rd party tools.2023 in Review2024-01-13T00:00:00+00:002024-01-13T00:00:00+00:00/blog/2024/01/13/upcoming2023 in Review

    Once again, the InvenTree development team has had a very busy year! In 2023, we have released 3 major stable versions of the InvenTree software, with a significant number of new features and improvements. It is also worth noting that we have had a huge number of new contributors to the project, and we would like to thank everyone who has helped make this possible!

    diff --git a/extend/app.html b/extend/app.html index 95feff7f..5cd6e18c 100644 --- a/extend/app.html +++ b/extend/app.html @@ -297,6 +297,8 @@ + + diff --git a/functions.html b/functions.html index c94decef..3abe4f64 100644 --- a/functions.html +++ b/functions.html @@ -206,6 +206,8 @@ + + diff --git a/lippoliv.html b/lippoliv.html index 18097cb4..ea8d752f 100644 --- a/lippoliv.html +++ b/lippoliv.html @@ -30,11 +30,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","dateModified":"2024-02-19T21:04:18+00:00","datePublished":"2024-02-19T21:04:18+00:00","description":"With over 15 years of experience and big big passion I learned to take care about the details. They build up to the big picture we have in mind. I’m planning ahead & act early to prevent a big bang.","headline":"Lippoliv","mainEntityOfPage":{"@type":"WebPage","@id":"/lippoliv"},"url":"/lippoliv"} diff --git a/lippoliv/inventree-default-salesorder-items.html b/lippoliv/inventree-default-salesorder-items.html index 4e2a9153..5fff54f5 100644 --- a/lippoliv/inventree-default-salesorder-items.html +++ b/lippoliv/inventree-default-salesorder-items.html @@ -31,11 +31,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"lippoliv"},"dateModified":"2024-02-19T21:04:18+00:00","datePublished":"2024-02-19T21:04:18+00:00","description":"Add default parts (configurable) to every newly created sales order automatically.","headline":"Inventree Default Salesorder Items","mainEntityOfPage":{"@type":"WebPage","@id":"/lippoliv/inventree-default-salesorder-items"},"url":"/lippoliv/inventree-default-salesorder-items"} diff --git a/matmair.html b/matmair.html index 99665f38..4544d6ae 100644 --- a/matmair.html +++ b/matmair.html @@ -30,11 +30,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","dateModified":"2024-02-19T21:04:18+00:00","datePublished":"2024-02-19T21:04:18+00:00","description":"I try to build an ecosystem of reusable plugins and integrations for InvenTree. Code once and KISS!","headline":"Matmair","mainEntityOfPage":{"@type":"WebPage","@id":"/matmair"},"url":"/matmair"} diff --git a/matmair/inventree-apprise.html b/matmair/inventree-apprise.html index e20c3421..a884de4e 100644 --- a/matmair/inventree-apprise.html +++ b/matmair/inventree-apprise.html @@ -31,11 +31,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"matmair"},"dateModified":"2024-02-19T21:04:18+00:00","datePublished":"2024-02-19T21:04:18+00:00","description":"Send notifications from InvenTree via Apprise","headline":"Inventree Apprise","mainEntityOfPage":{"@type":"WebPage","@id":"/matmair/inventree-apprise"},"url":"/matmair/inventree-apprise"} diff --git a/matmair/inventree-rapidoc.html b/matmair/inventree-rapidoc.html index 0ce622ad..55adc195 100644 --- a/matmair/inventree-rapidoc.html +++ b/matmair/inventree-rapidoc.html @@ -31,11 +31,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"matmair"},"dateModified":"2024-02-19T21:04:18+00:00","datePublished":"2024-02-19T21:04:18+00:00","description":"Use RapiDoc for Inventree API docs.","headline":"Inventree Rapidoc","mainEntityOfPage":{"@type":"WebPage","@id":"/matmair/inventree-rapidoc"},"url":"/matmair/inventree-rapidoc"} diff --git a/matmair/inventree-zapier.html b/matmair/inventree-zapier.html index ae7d9a20..a12df349 100644 --- a/matmair/inventree-zapier.html +++ b/matmair/inventree-zapier.html @@ -31,11 +31,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"matmair"},"dateModified":"2024-02-19T21:04:18+00:00","datePublished":"2024-02-19T21:04:18+00:00","description":"Integrate Zapier into InvenTree","headline":"Inventree Zapier","mainEntityOfPage":{"@type":"WebPage","@id":"/matmair/inventree-zapier"},"url":"/matmair/inventree-zapier"} diff --git a/news/feed.atom b/news/feed.atom index 2ab12832..5ca80850 100644 --- a/news/feed.atom +++ b/news/feed.atom @@ -1,4 +1,4 @@ -Jekyll2024-02-19T20:47:40+00:00/news/feed.atomInvenTree | NewsInvenTree is an open-source inventory management system which provides intuitive parts management and stock control. It is at the center of an ecosystem of addins for EDA tools, API wrapper, deeply integrated plugins and 3rd party tools.0.13.3 Release2024-01-22T00:00:00+00:002024-01-22T00:00:00+00:00/news/2024/01/22/0.13.30.13.3 Release +Jekyll2024-02-19T21:04:18+00:00/news/feed.atomInvenTree | NewsInvenTree is an open-source inventory management system which provides intuitive parts management and stock control. It is at the center of an ecosystem of addins for EDA tools, API wrapper, deeply integrated plugins and 3rd party tools.0.13.3 Release2024-01-22T00:00:00+00:002024-01-22T00:00:00+00:00/news/2024/01/22/0.13.30.13.3 Release

    We are pleased to announce the 0.13.3 bug fix release, which represents a number of small bug fixes and stability improvements to the software

    diff --git a/schrodingersgat.html b/schrodingersgat.html index 4fee6b0f..4c14bc85 100644 --- a/schrodingersgat.html +++ b/schrodingersgat.html @@ -30,11 +30,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","dateModified":"2024-02-19T21:04:18+00:00","datePublished":"2024-02-19T21:04:18+00:00","description":"Maintainer of InvenTree.","headline":"Schrodingersgat","mainEntityOfPage":{"@type":"WebPage","@id":"/schrodingersgat"},"url":"/schrodingersgat"} diff --git a/sitemap.xml b/sitemap.xml index 06a35eff..f943be15 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -106,71 +106,71 @@ /SergeoLacruz -2024-02-19T20:47:40+00:00 +2024-02-19T21:04:18+00:00 /afwkiers -2024-02-19T20:47:40+00:00 +2024-02-19T21:04:18+00:00 /lippoliv -2024-02-19T20:47:40+00:00 +2024-02-19T21:04:18+00:00 /matmair -2024-02-19T20:47:40+00:00 +2024-02-19T21:04:18+00:00 /schrodingersgat -2024-02-19T20:47:40+00:00 +2024-02-19T21:04:18+00:00 /wolflu05 -2024-02-19T20:47:40+00:00 +2024-02-19T21:04:18+00:00 /matmair/inventree-apprise -2024-02-19T20:47:40+00:00 +2024-02-19T21:04:18+00:00 /SchrodingersGat/inventree-brother-plugin -2024-02-19T20:47:40+00:00 +2024-02-19T21:04:18+00:00 /wolflu05/inventree-bulk-plugin -2024-02-19T20:47:40+00:00 +2024-02-19T21:04:18+00:00 /wolflu05/inventree-cups-plugin -2024-02-19T20:47:40+00:00 +2024-02-19T21:04:18+00:00 /lippoliv/inventree-default-salesorder-items -2024-02-19T20:47:40+00:00 +2024-02-19T21:04:18+00:00 /afkiwers/inventree-kicad -2024-02-19T20:47:40+00:00 +2024-02-19T21:04:18+00:00 /matmair/inventree-rapidoc -2024-02-19T20:47:40+00:00 +2024-02-19T21:04:18+00:00 /SergeoLacruz/inventree-supplier-panel -2024-02-19T20:47:40+00:00 +2024-02-19T21:04:18+00:00 /SchrodingersGat/inventree-wireviz -2024-02-19T20:47:40+00:00 +2024-02-19T21:04:18+00:00 /matmair/inventree-zapier -2024-02-19T20:47:40+00:00 +2024-02-19T21:04:18+00:00 /SergeoLacruz/inventree-zebra-plugin -2024-02-19T20:47:40+00:00 +2024-02-19T21:04:18+00:00 /404 diff --git a/wolflu05.html b/wolflu05.html index 1594e72a..deb2c812 100644 --- a/wolflu05.html +++ b/wolflu05.html @@ -30,11 +30,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","dateModified":"2024-02-19T21:04:18+00:00","datePublished":"2024-02-19T21:04:18+00:00","description":"InvenTree is an open-source inventory management system which provides intuitive parts management and stock control. It is at the center of an ecosystem of addins for EDA tools, API wrapper, deeply integrated plugins and 3rd party tools.","headline":"Wolflu05","mainEntityOfPage":{"@type":"WebPage","@id":"/wolflu05"},"url":"/wolflu05"} diff --git a/wolflu05/inventree-bulk-plugin.html b/wolflu05/inventree-bulk-plugin.html index e18c1d0e..fe9ca2d8 100644 --- a/wolflu05/inventree-bulk-plugin.html +++ b/wolflu05/inventree-bulk-plugin.html @@ -31,11 +31,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"wolflu05"},"dateModified":"2024-02-19T21:04:18+00:00","datePublished":"2024-02-19T21:04:18+00:00","description":"Bulk creation plugin for InvenTree","headline":"Inventree Bulk Plugin","mainEntityOfPage":{"@type":"WebPage","@id":"/wolflu05/inventree-bulk-plugin"},"url":"/wolflu05/inventree-bulk-plugin"} diff --git a/wolflu05/inventree-cups-plugin.html b/wolflu05/inventree-cups-plugin.html index 3ad9e680..5de93c9e 100644 --- a/wolflu05/inventree-cups-plugin.html +++ b/wolflu05/inventree-cups-plugin.html @@ -31,11 +31,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"wolflu05"},"dateModified":"2024-02-19T21:04:18+00:00","datePublished":"2024-02-19T21:04:18+00:00","description":"Label printing plugin for generic cups printers","headline":"Inventree Cups Plugin","mainEntityOfPage":{"@type":"WebPage","@id":"/wolflu05/inventree-cups-plugin"},"url":"/wolflu05/inventree-cups-plugin"}